c++ - gcc Woverloaded-虚拟警告

标签 c++ gcc virtual-functions overloading

我认为以下 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/

相关文章:

c++ - C++ 中的链表、多项式、重载运算符 << 和 >>

c++ - 错误: invalid operands of types 'int' and '<unresolved overloaded function type>' to binary 'operator<='

c 文件中内联汇编代码的编译错误,可能与分支有关

c - C/gcc 中的枚举类型检查

c++ - 一种简洁的说法 "this class overrides all necessary methods to be non-abstract"

c++ - 以下代码的符合 ISO C++ 标准的结果

c++ - 意外错误 "no matching function for call to",需要不带参数的构造函数

linux - 制作 : *** [install] Error 1

c++ - 使用 "irrelevant"方法的继承类设计

c++ - 为什么我调用mem_fun_ref会有 "no matching function"?