【问题标题】:error C2512: no appropriate default constructor available错误 C2512:没有合适的默认构造函数可用
【发布时间】:2016-03-28 11:35:35
【问题描述】:

我有类似下面代码的情况,但我收到错误 C2512: no proper default constructor available 错误

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){}
};

我不明白为什么会出现这样的错误。 请帮帮我

【问题讨论】:

    标签: c++ inheritance virtual-inheritance


    【解决方案1】:

    请检查这个问题Link

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

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

    【讨论】:

    • 为什么会这样? CProxy 正在调用 BProxy,它已经在调用 AProxy
    • 因为在使用虚拟继承时,大多数派生类都会调用虚拟基构造函数。
    猜你喜欢
    • 2013-08-25
    • 2012-10-10
    • 2014-12-31
    • 2012-12-16
    • 2014-01-31
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多