求助,在这个继承中如何输出TESTA

#include
using namespace std;

class A{
public:
void test(){ cout<< "TestA"<<endl;}
};

class B:public A{
public:
void test(){ cout<< "TestB"<<endl;}
};

class C:public A{
public:
void test(){ cout<< "TestC"<<endl;}
};

class D: public B, public C{
public:
void test(){ cout<< "TestD"<<endl;}
};

int main(){
D qwe;
qwe.C::A::test();//这个地方DEVC++提示我A不明确,语法过不了
return 0;
}


请问一下怎么才能输出TESTA。

B继承A
C继承A
D继承B,C
D中有两份A的成员,因此报错。

解决办法是加上virtual关键字,如下:

class B :virtual public A {

class C :virtual public A {

用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢!

楼上所说的虚基类当然能解决所说的情况,但是如果我本身想要在D中保存两个A的副本呢?
这样继承本身是没有问题的,只是在调用的时候,无法针对特定的副本进行调用。如果BC中没有定义test,那么可以 B::test(或者C::test()去针对特定副本调用。
想请问下,这种情况下的继承怎么处理?

不是应该是
A* a = new B(); 调用则是B的
A* a = new C(); 调用C.
而不是定义D类型