鱼C论坛

 找回密码
 立即注册
查看: 2509|回复: 7

[已解决]为什么这段代码编译不通过

[复制链接]
发表于 2023-2-14 16:26:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我将SB2成员函数设为Building类的友元,为啥还是访问不了Building类里的私有方法
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;

  4. class Building
  5. {
  6.         //告诉编译器  goodGay类中的visit成员函数 是Building好朋友,可以访问私有内容
  7. public:
  8.         Building();

  9. public:
  10.         string m_SittingRoom; //客厅
  11. private:
  12.         string m_BedRoom;//卧室
  13.     friend void a(Building& b);
  14.     friend class SB1;
  15.     friend void SB2::visit();
  16. };

  17. Building::Building()
  18. {
  19.         this->m_SittingRoom = "客厅";
  20.         this->m_BedRoom = "卧室";
  21. }

  22. void a(Building& b){
  23.     cout << b.m_SittingRoom << endl;
  24.     cout << b.m_BedRoom << endl;
  25. }

  26. class SB1{
  27. public:
  28.     SB1(){
  29.         sb = new Building();
  30.     }

  31.     void visit(){
  32.         cout << sb->m_SittingRoom << endl;
  33.         cout << sb->m_BedRoom << endl;
  34.     }

  35.     Building* sb;
  36. };

  37. class SB2{
  38. public:
  39.     SB2(){
  40.         sb = new Building();
  41.     }

  42.     void visit(){
  43.         cout << sb->m_SittingRoom << endl;
  44.         cout << sb->m_BedRoom << endl;
  45.     }

  46.     Building* sb;
  47. };

  48. int main(){
  49. }
复制代码
最佳答案
2023-2-14 19:20:25
本帖最后由 jhq999 于 2023-2-14 19:25 编辑
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. class Building;
  5. class SB2{//////////////
  6. public:
  7.     Building *sb;
  8.     SB2();
  9.     void visit();
  10. };
  11. class Building
  12. {
  13.         //告诉编译器  goodGay类中的visit成员函数 是Building好朋友,可以访问私有内容
  14. public:
  15.         Building();

  16. public:
  17.         string m_SittingRoom; //客厅
  18. private:
  19.         string m_BedRoom;//卧室
  20.     friend void a(Building& b);
  21.     friend class SB1;
  22.     friend void SB2::visit();
  23. };

  24. Building::Building()
  25. {
  26.         this->m_SittingRoom = "客厅";
  27.         this->m_BedRoom = "卧室";
  28. }

  29. void a(Building& b){
  30.     cout << b.m_SittingRoom << endl;
  31.     cout << b.m_BedRoom << endl;
  32. }
  33. SB2::SB2(){
  34.         sb = new Building();
  35.     }
  36. void SB2::visit(){
  37.         cout << sb->m_SittingRoom << endl;
  38.         cout << sb->m_BedRoom << endl;
  39.     }
  40. class SB1{
  41. public:
  42.     SB1(){
  43.         sb = new Building();
  44.     }

  45.     void visit(){
  46.         cout << sb->m_SittingRoom << endl;
  47.         cout << sb->m_BedRoom << endl;
  48.     }

  49.     Building* sb;
  50. };






  51. int main(){
  52.     SB2 s2;
  53.     s2.visit();
  54. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-2-14 16:29:03 | 显示全部楼层
私有成员变量 不是私有方法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-14 16:30:03 | 显示全部楼层
求助啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-14 16:49:20 | 显示全部楼层
有人吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-14 17:34:09 | 显示全部楼层
编译不通过编译器说什么了?说的是什么意思?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-14 18:24:04 | 显示全部楼层
  1. friend void SB2::visit();//sb2声明在后,Building不认识
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-14 18:34:09 | 显示全部楼层


是不是在第5行之前加个class SB2;

要是的话,还是错的

error: invalid use of incomplete type ‘class SB2’
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-14 19:20:25 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2023-2-14 19:25 编辑
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. class Building;
  5. class SB2{//////////////
  6. public:
  7.     Building *sb;
  8.     SB2();
  9.     void visit();
  10. };
  11. class Building
  12. {
  13.         //告诉编译器  goodGay类中的visit成员函数 是Building好朋友,可以访问私有内容
  14. public:
  15.         Building();

  16. public:
  17.         string m_SittingRoom; //客厅
  18. private:
  19.         string m_BedRoom;//卧室
  20.     friend void a(Building& b);
  21.     friend class SB1;
  22.     friend void SB2::visit();
  23. };

  24. Building::Building()
  25. {
  26.         this->m_SittingRoom = "客厅";
  27.         this->m_BedRoom = "卧室";
  28. }

  29. void a(Building& b){
  30.     cout << b.m_SittingRoom << endl;
  31.     cout << b.m_BedRoom << endl;
  32. }
  33. SB2::SB2(){
  34.         sb = new Building();
  35.     }
  36. void SB2::visit(){
  37.         cout << sb->m_SittingRoom << endl;
  38.         cout << sb->m_BedRoom << endl;
  39.     }
  40. class SB1{
  41. public:
  42.     SB1(){
  43.         sb = new Building();
  44.     }

  45.     void visit(){
  46.         cout << sb->m_SittingRoom << endl;
  47.         cout << sb->m_BedRoom << endl;
  48.     }

  49.     Building* sb;
  50. };






  51. int main(){
  52.     SB2 s2;
  53.     s2.visit();
  54. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 17:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表