需求是类A中包含类B,而类B又须要访问类A的public属性的成员。ios
首先类B中要访问类A的属性,那么对于类B而言,咱们必需要知道有类A这个类,因此在类B的具体实现以前咱们须要前向声明类A。函数
对于类A包含一个类B的对象,那么对于类A而言,须要知道类B的构造函数,因此类B的构造函数的声明须要在类A的具体实现以前。this
main.cppspa
#if 0//Multi #include "A.h" #else #include <iostream> using namespace std; class CA; class CB { public: void funB(CA &a); CB(){}; ~CB(){}; }; class CA { public: int m_a; CB b; void funA(); CA(int a); CA(){}; ~CA(){}; }; void CA::funA() { b.funB(*this); } CA::CA(int a) { m_a=a; } void CB::funB(CA &a) { cout<<"this is CA: "<<a.m_a<<endl; } #endif int main() { CA a(3); a.funA(); return 0; }
多文件的话则选择Multi开关下的代码code
A.h对象
#ifndef _A_H_ #define _A_H_ #include "B.h" class CA { public: int m_a; CB b; void funA(); CA(int a); CA(){}; ~CA(){}; }; #endif
A.cppblog
#include "A.h" void CA::funA() { b.funB(*this); } CA::CA(int a) { m_a=a; }
B.hio
#ifndef _B_H_ #define _B_H_ class CA; class CB { public: void funB(CA &a); CB(){}; ~CB(){}; }; #endif
B.cppclass
#include "A.h" #include "B.h" #include <iostream> using namespace std; void CB::funB(CA &a) { cout<<"this is CA: "<<a.m_a<<endl; }
太水了,继续享受着在被我拖着后腿的公司里工做。stream