C++におけるクラス相互に含まれる問題
811 ワード
実はこの问题はC++の中で比较的によくある1つの问题と言えるべきで、C++の中で2つのクラスは互いに含んで、もしすべてそれぞれのクラスの头のファイルの中で相手を含んで、きっと间违いを报告します.最近この問題に直面して、最後にネット上で解決の方法を見つけました.解決策は次のとおりです.
AとBの2つのクラスがある場合、それぞれ対応するヘッダファイルはA.h,B.hとソースファイルA.cppとB.cppである.
Aのヘッダファイル(A.h)にBのヘッダファイル(B.h)を含み、Aのソースファイル(A.cpp)に(A.h)を含み、BのヘッダファイルにAの宣言(class A;)を用いる.Aを含むヘッダファイルではなく、Bのソースファイル(B.cpp)にAのヘッダファイルとBのヘッダファイルが含まれます.コードは次のとおりです.
AとBの2つのクラスがある場合、それぞれ対応するヘッダファイルはA.h,B.hとソースファイルA.cppとB.cppである.
Aのヘッダファイル(A.h)にBのヘッダファイル(B.h)を含み、Aのソースファイル(A.cpp)に(A.h)を含み、BのヘッダファイルにAの宣言(class A;)を用いる.Aを含むヘッダファイルではなく、Bのソースファイル(B.cpp)にAのヘッダファイルとBのヘッダファイルが含まれます.コードは次のとおりです.
// A.h
#include "B.h"
class A
{
public:
A(B* pB):m_pB(pB) {}
void useB();
private:
B* m_pB;
};
//A.cpp
#include "A.h"
void A::useB()
{
//do something for m_pB
}
//B.h
class A;
class B
{
public:
B(A* pA):m_pA(pA) {}
void useA();
private:
A* m_pA;
};
//B.cpp
#include "A.h"
#include "B.h"
void B::useA()
{
//do something for m_pA
}