多重继承:Diamond:VS-12 / gcc警告没有警告

时间:2015-04-16 09:57:57

标签: c++

目前我试图更好地理解虚拟继承的警告,因为我正在考虑使用它们(委托给姐妹班)。我使用https://isocpp.org/wiki/faq/multiple-inheritance

中的以下示例
#include <iostream>

class Base { 
public:  
    virtual void foo() = 0;  
    virtual void bar() = 0; 
}; 

class Der1 : public virtual Base { 
public:  
    virtual void foo();
}; 

void Der1::foo() { 
    bar(); 
}

class Der2 : public virtual Base { 
public:  
    virtual void bar(); 
}; 

void Der2::bar() {
    std::cout << "Der2::bar()" << std::endl;
}

class Join : public Der1, public Der2 {
public:  
    // ...
};

int main() {  
    Join* p1 = new Join();  
    Der1* p2 = p1;  
    Base* p3 = p1;  
    p1->foo();  
    p2->foo();  
    p3->foo();
}

使用TDM-GCC-32(gcc 4.9.2)我用

编译它
    g++ test.cpp -Wall -Wpedantic -o test.exe

我绝对没有错误或警告。

使用MSVC-2013(VS-12 Update 4),我收到以下警告

    warning C4250: 'Join': Erbt 'Der1::Der1::foo' via Dominanz

为什么Visual Studio警告我并且gcc不警告?我是否需要担心警告C4250?

1 个答案:

答案 0 :(得分:0)

您可以在这里阅读C4250的含义:

What does C4250 VC++ warning mean?

通过虚拟继承解决的可能方法:

Visual Studio Compiler warning C4250 ('class1' : inherits 'class2::member' via dominance)