1

我有一些这样的代码:

class Class1 {
    // some code here

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

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

我得到了一个Class2函数未知的错误inverse。我可以声明该类吗?如何声明?

4

2 回答 2

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

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

于 2013-05-14T20:18:09.690 回答
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() {
    // 
}

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

于 2013-05-14T20:18:30.010 回答