目前我试图更好地理解虚拟继承的警告,因为我正在考虑使用它们(委托给姐妹班)。我使用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?
答案 0 :(得分:0)
您可以在这里阅读C4250的含义:
What does C4250 VC++ warning mean?
通过虚拟继承解决的可能方法:
Visual Studio Compiler warning C4250 ('class1' : inherits 'class2::member' via dominance)