新手请教!!!!!!!

梅赛德斯466 2024-02-25 12:47:29

 为什么一定要声明第九行啊?不然就报错。可是a,b不都是pulic下的吗

 

 

...全文
357 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1

C++ 代码的编译顺序是先经过预处理生成经过预处理的源代码文件,然后编译生成汇编代码,再汇编生成目标文件,最后链接生成可执行程序。这些阶段之间有依赖关系,必须按照顺序进行才能得到最终的可执行程序。
为了避免编译错误,必须确保在使用实体之前已经进行了声明或定义。在编写程序时,要注意遵循声明和使用的顺序关系,确保程序能够正确编译和运行。

  • 打赏
  • 举报
回复 1

您应该将main函数放在最下面,因为函数声明要在使用之前。在main函数中使用了<<函数,那么在这之前必须声明这个函数。

img

可以这样改:

#include <iostream>
#include <string>
using namespace std;


class person {
    
public:
    int a;
    int b;
    


};
void operator<<(ostream& cout, const person& p) {
    cout << p.a << " " << p.b << endl;
}
int main() {
    person p;
    p.a = 10;
    p.b = 10;
    cout << p;
    return 0;
}




  • 举报
回复
@太空漫步11 确实是这样,main函数下移后就成功了。但是为什么不下移main函数,添加友元声明,也可以达到同样的目的啊,求教
  • 举报
回复
@梅赛德斯466 添加友元声明,和函数声明是同样的。比如下面的也能成功编译 class person { public: int a; int b; } void operator&lt;&lt;(ostream& cout, const person& p); int main() { person p; p.a = 10; p.b = 10; cout &lt;&lt; p; return 0; } void operator&lt;&lt;(ostream& cout, const person& p) { cout &lt;&lt; p.a &lt;&lt; " " &lt;&lt; p.b &lt;&lt; endl; }
ooolinux 02-25
  • 打赏
  • 举报
回复

不然的话,cout << p; //p是自定义对象, cout<<不认识

  • 举报
回复
@ooolinux 可是这个跟添加友元声明有什么关系啊
ooolinux 02-25
  • 举报
回复
@梅赛德斯466 &lt;&lt;运算法重载,相当于函数,可以理解成 cout.&lt;&lt;(p),把&lt;&lt;看成cout的成员函数,p看成函数参数

64,312

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧