次のようなコードがありますが、それを機能させる方法がわかりません。
私はそれを検索し、循環依存関係のように見えますが、今のところ、いくつかの例を試してみましたが、依存関係 2 でのみ機能します。
代わりに、これには、多くのクラスが依存している「Ctrl」クラスがあります(CtrlAとCtrlBは相互に依存しており、Axクラスには両方のCtrlが必要です)が、これらのクラスの一部にはCtrlファイルも必要です(CtrlAにはAxが必要です)クラス)。また、継承されたクラスがあります (A2 は A3 を継承します)。
CtrlA.h
#ifndef CTRLA
#define CTRLA
#include "CtrlB.h"
#include "A1.h"
class CtrlB;
class A1;
class CtrlA{
protected:
A1 x;
public:
void op1(CtrlB b){
a.op1(this, b);
}
void op2(){}
};
#endif
CtrlB.h
#ifndef CTRLB
#define CTRLB
#include "CtrlA.h"
class CtrlA;
class CtrlB{
protected:
public:
void op1(){}
void op2(CtrlA a){
a.op1(this);
}
};
#endif
A1.h
#ifndef A1
#define A1
#include "CtrlA.h"
#include "CtrlB.h"
#include "A2.h"
class CtrlA;
class CtrlB;
class A1{
protected:
A2 x1;
public:
void op1(CtrlA a, CtrlB b){
x1.op1(this, b);
}
};
#endif
A2.h
#ifndef A2
#define A2
#include "CtrlA.h"
#include "CtrlB.h"
#include "A3.h"
class CtrlA;
class CtrlB;
class A2:public A3{
protected:
public:
void op1(CtrlA a, CtrlB b){
a.op2();
b.op1();
}
};
#endif
A3.h
#ifndef A3
#define A3
#include "CtrlA.h"
#include "CtrlB.h"
class CtrlA;
class CtrlB;
class A3{
protected:
public:
virtual void op1(CtrlA a, CtrlB b) = 0;
};
#endif
main.cpp
#include "CtrlA.h"
#include "CtrlB.h"
int main(){
int i;
}
コードが機能するように誰かがコードを修正するのを手伝ってくれたら、とても感謝しています。