C++ 错误C2512:没有合适的默认构造函数可用

C++ 错误C2512:没有合适的默认构造函数可用,c++,inheritance,virtual-inheritance,C++,Inheritance,Virtual Inheritance,我有一个类似下面代码的情况,但我得到了错误C2512:没有合适的默认构造函数可用错误 class A { }; class AProxy :public A { A* ptr; public: AProxy(A* var):ptr(var){} }; class B : public A { }; class BProxy : public virtual B, public virtual AProxy { B* ptr; public : BProxy(

我有一个类似下面代码的情况,但我得到了错误C2512:没有合适的默认构造函数可用错误

class A
{
};

class AProxy :public A
{
    A* ptr;
public:
    AProxy(A* var):ptr(var){}
};

class B : public A
{
};

class BProxy : public virtual B, public virtual AProxy
{
    B* ptr;
public :
    BProxy(B* var):AProxy(var),ptr(var){}
};

class C : public B
{
};

class CProxy  : public virtual BProxy, public virtual C
{
    C* ptr;
public :
    CProxy(C* var):BProxy(var),ptr(var){}
};
我不明白为什么会出现这样的错误。
请帮我解决这个问题

您的问题在于
virtual
继承。您需要在
CProxy
构造函数的初始化列表中调用
AProxy
构造函数:

public :
CProxy(C* var):BProxy(var), AProxy(var),ptr(var){}

为什么会这样
CProxy
正在调用
BProxy
,它已经在调用
AProxy
,因为在使用虚拟继承时,虚拟基构造函数是从大多数派生类调用的。