1

私はそのようないくつかのコードを持っています:

class Class1 {
    // some code here

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

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

Class2そして、 function で不明なエラーが発生しました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()ため、前方宣言してもその問題は完全には解決されません。ただし、できることは 2 つあります。へのポインタまたは参照を返す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() {
    // 
}

可能であれば、2番目のオプションを使用します。

于 2013-05-14T20:18:30.010 に答える