今天下午发现个坑,原理不太清楚,还是要记录一下
这份代码只是挪了一下位置,就编译不通过了
以下是编译不通过的
#include#include using namespace std; class Building; class goodGay { public: goodGay(); void visit(); private: Building* building; Building m_b; }; class Building { //告诉编译器 goodGay类是Building类的好朋友,可以访问到Building类中私有内容 friend class goodGay; public: Building(); public: string m_SittingRoom; //客厅 private: string m_BedRoom;//卧室 }; Building::Building() { this->m_SittingRoom = "客厅"; this->m_BedRoom = "卧室"; } goodGay::goodGay() :m_b() { building = new Building; } void goodGay::visit() { cout << "好基友正在访问" << building->m_SittingRoom << endl; cout << "好基友正在访问" << building->m_BedRoom << endl; } void test01() { goodGay gg; gg.visit(); } int main() { test01(); system("pause"); return 0; }
一下是编译可以通过的代码
#include#include using namespace std; class Building { //告诉编译器 goodGay类是Building类的好朋友,可以访问到Building类中私有内容 friend class goodGay; public: Building(); public: string m_SittingRoom; //客厅 private: string m_BedRoom;//卧室 }; class goodGay { public: goodGay(); void visit(); private: Building* building; Building m_b; }; Building::Building() { this->m_SittingRoom = "客厅"; this->m_BedRoom = "卧室"; } goodGay::goodGay() :m_b() { building = new Building; } void goodGay::visit() { cout << "好基友正在访问" << building->m_SittingRoom << endl; cout << "好基友正在访问" << building->m_BedRoom << endl; } void test01() { goodGay gg; gg.visit(); } int main() { test01(); system("pause"); return 0; }
看报错说m_b调用的是不完整的类,估计是在给m_b初始化时类Building还没有实现



