相互へのポインターを使用して、2 つの同一のクラス X と Y を作成しました。以下の Xh のコードを参照してください。Yh は、すべての X と Y を交換したものと同じです。ただし、このコードでは Connect メソッドでエラーが発生します (エラー C2027: 未定義の型 'Y' の使用)。Xh では、クラス Y を前方宣言しましたが、Y に SetXPointer という名前のメソッドがあることを認識していません。したがって、このメソッドも前方宣言する必要がありますよね?
これを実行しようとすると (class Y; という行の下に Y::SetXPointer(X* pX_in); という行を追加すると)、コンパイラ エラー C2761: 'void Y::SetXPointer(X *)' : member function redeclaration が発生します。禁止されている。クラスXでクラスYのパブリックメソッドを使用する方法はありますか?
// X.h
#pragma once
#include "Y.h"
// Forward declaration
class Y;
class X
{
public:
X(void) : data(24) {};
~X(void) {};
int GetData() { return data; }
void SetYPointer(Y* pY_in) { pY = pY_in; }
Y* GetYPointer() { return pY; }
void Connect(Y* Y_in) { pY = Y_in; Y_in->SetXPointer(this); }
private:
int data;
Y *pY;
};