我认为以下 C++ 代码是正确的,但在使用“-Woverloaded-virtual”编译时会产生一些警告,是警告是假的还是此代码存在真正的问题?
如果这是一个虚假警告,我可以做些什么来避免它,定义所有异常虚拟变体派生的摆脱警告,但也许是一个更好的解决方案
G++ 命令:
g++ -c -Woverloaded-virtual test.cpp
test.cpp:22:18: warning: ‘virtual void intermediate::exception(const char*)’ was hidden [-Woverloaded-virtual]
test.cpp:32:18: warning: by ‘virtual void derived::exception()’ [-Woverloaded-virtual]
C++ 代码
using namespace std;
class base
{
public:
virtual void exception() = 0;
virtual void exception(const char*) = 0;
};
class intermediate : public base
{
public:
virtual void exception()
{
cerr << "unknown exception" << endl;
}
virtual void exception(const char* msg)
{
cerr << "exception: " << msg << endl;
}
};
class derived : public intermediate
{
public:
virtual void exception()
{
intermediate::exception("derived:unknown exception");
}
};
最佳答案
警告的意思是:
当您不使用动态调度时,您的 derived
类对象只能调用,
void exception()
它会隐藏基类intermediate
的所有同名方法.
为了您的派生类对象可以调用基类中所有相同命名的方法intermediate
, 您需要将以下行添加到您的 derived
类。
using intermediate::exception;
当然,您最有资格决定这是否是一个问题。
关于c++ - gcc Woverloaded-虚拟警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9995421/