对于声明为虚函数的函数,我似乎无法获取不推荐使用的警告来打印出来。 我正在使用“g ++(GCC)4.1.1 20061011(Red Hat 4.1.1-30)”。 我的研究表明,在gcc 4.x中可能会有一些问题,关于废弃纯虚函数(即类bueller {virtual int cameron()= 0;};),但不是…我想你会打电话给他们定期虚拟function 就这样我们在同一页面上…
foo.h中
class Foo { void Foo_A() __attribute__((deprecated)); //non-virtual virtual void Foo_B() __attribute__((deprecated)); //virtual virtual void Foo_C() __attribute__((deprecated)) = 0; //pure virtual };
说我编译这个,一个foo.cpp文件和一些main.cpp文件使用g ++。
1)任何使用Foo_A()的确实会显示警告。
2)任何使用Foo_B()的都不会显示警告。
3)任何inheritanceFoo的实现Foo_C,然后使用它不会显示警告。
第一:有效,没问题。
数字3:似乎是一个已知的bug /function..无论..
#2似乎没有探索,但是。 也许它被排在#3,虽然我没有发现任何提及它。
任何人都知道,如果我想在这里错过任何关于我想弃用的常规虚拟类成员函数?
顺便说一句:-Wno-deprecate在我的makefiles中没有打开。
鉴于这个计划:
struct Foo { virtual void Foo_B() __attribute__((deprecated)); //virtual }; struct DerivedFoo : public Foo { }; int main() { DerivedFoo d; d.Foo_B(); Foo &f = d; f.Foo_B(); } void Foo::Foo_B() {}
在CentOS 5.2(gcc版本4.1.2 20080704(Red Hat 4.1.2-44))上,我得到了与你描述的相同的输出:
g++ deprecate.cc -o deprecate deprecate.cc: In function 'int main()': deprecate.cc:14: warning: 'Foo_B' is deprecated (declared at deprecate.cc:3)
但是,在Ubuntu 10.04.1(gcc版本4.4.3(Ubuntu 4.4.3-4ubuntu5)),我得到你所期望的输出:
g++ deprecate.cc -o deprecate deprecate.cc: In function 'int main()': deprecate.cc:14: warning: 'virtual void Foo::Foo_B()' is deprecated (declared at deprecate.cc:3) deprecate.cc:16: warning: 'virtual void Foo::Foo_B()' is deprecated (declared at deprecate.cc:3)
所以,我猜这是一个编译器错误得到修复。
你是否通过Foo指针/引用或派生类来调用Foo_B()/ Foo_C()? 如果您使用派生类,那么您必须标记其中已弃用的方法,或者获得您描述的行为。
Google在Debian名单上展示了一个关于这个主题的旧式讨论 。 但是这个话题没有什么新近出现。 尝试询问发行版(本例中为RedHat)列表。