在c++中,类A派生了B、C,然后B、C又共同派生了类D。现在我在主程序中有语句switch(k),当k值为1、2、3时,分别创建B、C、D的实例。我的写法是这样的:A a; //a为实例switch (k){ case 1: a=new B(); break; case 2: a=new C(); break; case 3: a=new D(); break;}这样编译时报了D处的错ambiguous conversions ;若是写成:switch (k){ case 1: B a(); break; case 2: C a(); break; case 3: D a(); break;}也会报错说对象没有建立完整。请教处理方法

热心网友

第一段中由于,B,C都派生自A,所有D中继承了两个A的实例,当生成对象时,就会让编译器不知道用哪个A实例。请将,A中的函数改为虚函数或纯虚函数试试。应该能解决问题为什么,a不是指针,我很奇怪,不知道你是如何实现类的,这样很容易内存出错的。