c – 使用g,如何弃用虚拟类成员函数

c – 使用g,如何弃用虚拟类成员函数,第1张

概述对于声明为虚拟函数,我似乎无法将弃用的警告打印出来. 我正在使用“g(GCC)4.1.1 20061011(Red Hat 4.1.1-30).” 我的研究表明 gcc 4.x中可能存在关于弃用的问题 纯虚函数(即类bueller {virtual int cameron()= 0;};), 但不是……我猜你会把它们称为常规……虚函数. 就这样,我们在同一页上…… foo.h中 class Fo 对于声明为虚拟的函数,我似乎无法将弃用的警告打印出来.
我正在使用“g(GCC)4.1.1 20061011(Red Hat 4.1.1-30).”
我的研究表明 gcc 4.x中可能存在关于弃用的问题
纯虚函数(即类bueller {virtual int cameron()= 0;};),
但不是……我猜你会把它们称为常规……虚函数.
就这样,我们在同一页上……

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文件和一些使用g的main.cpp文件.

1)任何使用Foo_A()的东西都会显示警告.

2)任何使用Foo_B()的东西都不会显示警告.

3)任何继承Foo,实现Foo_C然后使用它的东西都不会显示警告.

1号:它有效,没问题.

3号:看起来像一个已知的BUG /功能……无论如何..

然而,似乎没有#2的探索.
也许它被排在第3位,尽管我发现没有提到它.

任何人都知道我是否遗漏了有关我想弃用的常规虚拟类成员函数的任何内容?

BTW:-Wno-deprecate未在我的makefile中打开.

解决方法 鉴于此计划:

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 deprecatedeprecate.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 deprecatedeprecate.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)

所以,我猜这是一个修复的编译器错误.

总结

以上是内存溢出为你收集整理的c – 使用g,如何弃用虚拟类成员函数全部内容,希望文章能够帮你解决c – 使用g,如何弃用虚拟类成员函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1225301.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存