需求是類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