クラスを他のクラスのメンバにすると C2079 エラー

VC++ で、例えば次のような書き方をしたとする。

class Test2;// 宣言
class Test1
{
public:
Test1();
~Test1();
Test2 m_test2; // ← Test2 をメンバに持たせる。
};
class Test2
{
public:
Test2();
~Test2();
};

すると、

error C2079: ‘Test1::m_test2’ が 未定義の class ‘Test2’ で使用しています。

というコンパイルエラーになる。

これは

class Test2;// 宣言
class Test1
{
public:
Test1();
~Test1();
Test2 *m_test2; // ← ポインタにする。
};
class Test2
{
public:
Test2();
~Test2();
};

とすればコンパイルは通る。

もしくは、Test2 を Test1 より先に書く。

参考:
コンパイラ エラー C2079

タイトルとURLをコピーしました