私たちが持っているとしましょう
class Base
{
public:
virtual void foo(){}
};
class Derived: public virtual Base
{};
class Derived_Left: public Derived
{};
class Derived_Right: public Derived
{};
class Bottom: public Derived_Left, public Derived_Right
{};
//ケースについて議論しましょう
// ケース 1:
void foo()
{
Base *bptr = new Bottom;
Derived *dPtr = dynamic_cast<Derived*>(bptr);//dptr == 0
}
// ケース 2:
void goo()
{
Bottom *bptr = new Bottom;
Derived *ddtr = dynamic_cast<Derived*>(bptr); // ERROR
}
//main.cpp: 関数 'void goo()' 内:
//main.cpp:36:49: エラー: 'Derived' は 'Bottom' のあいまいなベースです</p>
int main()
{
}
では、なぜコードがコンパイルされるのか
Base* bptr = new Bottom;
の場合ではありません
Bottom* bptr = new Bottom;