【发布时间】:2009-09-17 07:13:51
【问题描述】:
我对 Visual Studio 2008 的虚拟继承有疑问。
考虑以下示例:
#include<iostream>
class Print {
public:
Print (const char * name) {
std::cout << name << std::endl;
}
};
class Base : public virtual Print {
public:
Base () : Print("Base") {}
};
class A : public Base {
public:
A () : Print("A") {}
};
class B : public A {
public:
B () : Print("B") {}
};
int main (int argc, char** argv) {
A a; // should print "A"
B b; // should print "B"
return 0;
}
如果我在我的 linux 机器上使用 gcc,这段代码编译得很好。 但是,如果我尝试使用 Visual Studio 在 Windows 上构建相同的内容,则编译失败并显示错误消息“错误 C2614:'B':非法成员初始化:'Print' 不是基础或成员。”
为什么这不起作用?
【问题讨论】:
-
代码在 VS2008 下编译并且对我来说很好。
-
错误出现在哪一行?
-
在 Visual C++ 2008 SP1 上按预期工作。
标签: c++ gcc visual-c++ virtual-inheritance