仮想継承に関してVisualStudio2008に問題があります。
次の例を考えてみましょう。
#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':不正なメンバーの初期化:'印刷'はベースまたはメンバーではありません」というエラーメッセージが表示されてコンパイルが失敗します。
なぜこれが機能しないのですか?