通過在A類和B類定義(標題)中使用前向聲明並在A.cpp中包含A.h,在A.cpp中包含B.h解決了該問題。代碼如下:
//A.h
#ifndef A_H_
#define A_H_
#include <iostream>
using namespace std;
class B;
class A{
public:
A();
virtual ~A();
private:
B* pToB;
public:
void doSomething(B* b);
void SetB(B* b);
};
#endif
cpp for A class,注意包含B.H(這個通常我不會做)
// A.cpp
#include "A.h"
#include "B.h"
A::A():pToB(){
cout << "A constructor" << endl;
}
A::~A(){}
void A::SetB(B* b){
this->pToB = b;
cout << "setting B" << endl;
}
void A::doSomething(B* b){
cout << "A is gonna call B's method add: ";
b->add();
}
現在的B級:
// B.h
#ifndef B_H_
#define B_H_
#include <iostream>
using namespace std;
class A;
class B{
public:
B();
virtual ~B();
private:
A* pToA;
public:
void add();
void SetA(A* a);
};
#endif
實施對於B
// B.cpp
#include "B.h"
#include "A.h"
B::B():pToA(){
cout << "B constructor」 << endl;
}
B::~B(){}
void B::SetA(A* a){
this->pToA = a;
cout << "setting A" << endl;
}
void B::add(){
cout << "B is adding" << endl;
}
的CPP,包括主要功能(包括標題在內,沒有不包括)
#include "A.h"
#include "A.h"
int main() {
A* newA = new A;
B* newB = new B;
newA->SetB(newB);
newB->SetA(newA);
newA->doSomething(newB);
return 0;
}
輸出這個程序是這樣的:
A constructor
B constructor
setting B
setting A
A is gonna call B's method add: B is adding
感謝Sandeep Datta其solution幫我解決這個問題
添加'#包括「B.h」'在A.cpp。 –
@RSahu ..你完全正確。我只需要自己澄清一下。 Thnks –