有一个复杂的程序不断抛出缺少的默认构造函数错误,经过反复修改后,我发现完全相同的情况也产生了相同的错误。这怎么了

class B;

class A
{
public:
    A() {instance = new B;}
    virtual ~A() {delete instance;}
private:
    A*instance;
};

class B : public A
{
public:
    B(){}
}


无法转发声明派生类以在基类中使用?

最佳答案

如果编译器对类new B一无所知,B如何成功?如果将成员函数实现从类A的定义下移出类B,则它应该起作用:

class A
{
public:
    A();
    virtual ~A();
private:
    A * instance;
};

class B : public A
{
public:
    B(){}
};

A::A()
{
    instance = new B;
}

A::~A()
{
    delete instance;
}


无论如何,A和B到底是什么?确保有一个基类实例化一个派生类肯定是不寻常的。

关于c++ - 正向声明要在基类中使用的派生类会导致缺少默认构造函数错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11593649/

10-13 06:21