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.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
}