C ++前向类声明

时间:2015-10-23 17:24:16

标签: c++ class inheritance forward-declaration

我有2个A和B类,简单地说:

class A {
public:
    void someMethod() {
        //////
        B* b = new B(); //Error
    }
};

class B:A{
    ////
};

在父类中使用子类对象我需要做什么?

2 个答案:

答案 0 :(得分:2)

在完全定义类B之后,您需要定义成员函数,例如:

class A {
public:
    void someMethod();
};

class B: A {
    ////
};
void A::someMethod()
{
    //////
    B* b = new B(); //Error
}

int main()
{
    A a;
    a.someMethod();
}

如果你只使用前向声明,但成员函数的定义是在完全定义了类B之前,那么它将无法工作,因为new B需要B来完全定义。

答案 1 :(得分:1)

您可以使用

    B* b = new B();

仅当类B的定义完全可见时才会显示。

在定义B后移动函数的实现。

class A {
  public:
    // Declare only
    void someMethod();
};

class B : A {
    ////
};

void A::someMethod() {
    B* b = new B();
}