派生类的前向声明

时间:2013-05-14 20:13:09

标签: c++ class declaration

我有一些类似的代码:

class Class1 {
    // some code here

    Class2 inverse() {
        // some code here
    }
};

class Class2 : public Class1 {
    // some code here
};

我收到错误Class2在函数inverse中未知。我可以申报那个班级吗?

2 个答案:

答案 0 :(得分:2)

您可以在Class2之前转发声明Class1。然后,您必须将inverse函数声明与定义分开。所以你应该在定义Class2之后定义

class Class2;
class Class1 {
// some code here

Class2 inverse();
};

class Class2: public Class1 {
// some code here
};

Class2 Class1::inverse()
{
    return Class2();
}

但是,老实说,这是糟糕的设计。

答案 1 :(得分:0)

当您到达Class2时未定义

Class2 inverse(),因此即使向前声明也无法完全解决该问题。但是你可以做两件事。返回指针或对Class2

的引用
class Class2;
^^^^^^^^^^^^
class Class1 {    
    Class2& inverse() {
    //   ^^^ or possibly Class2*
       // 
    }
};

class Class2: public Class1 {
}

inverse完全定义后定义Class2

class Class2;
class Class1 {
   Class2 inverse(); 
};

class Class2: public Class1 {
   // 
}

Class2 Class1::inverse() {
    // 
}

如果可能,我会选择第二种选择。