ambiguous conversions from D* to A*
but as I look at the code D is a derived class from A as AA is a derived class from A and D should have all the properties as A correct?
//this code works....
class A
{
public:
A(){}
virtual ~A()
{
std::cout << "A\n";
}
virtual void Print(void) = 0;
};
class B : virtual public A//need the virtual in derived class to stop duplicate base classes in multiple inheritance
{
public:
B(){}
virtual ~B()
{
std::cout << "B\n";
}
virtual void Print(void)
{
std::cout << "B\n";
}
};
class C : public B
{
public:
C(){}
virtual ~C()
{
std::cout << "C\n";
}
};
class AA : virtual public A
{
public:
AA(){}
virtual ~AA()
{
std::cout << "AA\n";
}
virtual void Print(void)
{
std::cout << "AA\n";
}
};
class D : public AA, public B
{
public:
D(){}
virtual ~D()
{
std::cout << "D\n";
}
virtual void Print(void)
{
std::cout << "D\n";
}
};
int main(int argc, const char* argv[])
{
A* a = nullptr;
B* b = new B();
C* c = new C();//left Print() out to show it will default to B
D* d = new D();
a = b;
a->Print();std::cout << std::endl;
a = c;
a->Print();std::cout << std::endl;
a = d;// if you take out the virtual in the base classes of class D e.g. AA and B you can't do this...
a->Print();std::cout << std::endl;std::cout << std::endl;
delete b;
std::cout << std::endl;
delete c;
std::cout << std::endl;
delete d;
return 0;
}
code that spits out the error
class A
{
public:
A(){}
virtual ~A()
{
std::cout << "A\n";
}
virtual void Print(void) = 0;
};
class B : virtual public A//need the virtual in derived class to stop duplicate base classes in multiple inheritance
{
public:
B(){}
virtual ~B()
{
std::cout << "B\n";
}
virtual void Print(void)
{
std::cout << "B\n";
}
};
class C : public B
{
public:
C(){}
virtual ~C()
{
std::cout << "C\n";
}
};
class AA : public A
{
public:
AA(){}
virtual ~AA()
{
std::cout << "AA\n";
}
virtual void Print(void)
{
std::cout << "AA\n";
}
};
class D : public AA, public B
{
public:
D(){}
virtual ~D()
{
std::cout << "D\n";
}
virtual void Print(void)
{
std::cout << "D\n";
}
};