网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月15日漏签0天
c++吧 关注:614,891贴子:2,110,842
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 14回复贴,共1页
<<返回c++吧
>0< 加载中...

为什么,搞不懂

  • 只看楼主
  • 收藏

  • 回复
  • 叶仙帝
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <iostream>
using namespace std;
class MyInteger
{
friend ostream& operator<<(ostream& cout, MyInteger& my);
public:
MyInteger()
{
m_Num = 0;
}
//重载前置++运算符
MyInteger& operator++()
{
m_Num++;
return *this;
}
//重载后置++运算符
MyInteger operator++(int)
{
MyInteger temp;
temp = *this;
m_Num++;
return temp;
}
private:
int m_Num;
};
ostream& operator<<(ostream& cout, MyInteger& my)
{
cout << my.m_Num;
return cout;
}
void test01()
{
MyInteger myint;
cout << ++myint << endl;
cout << myint << endl;
}
void test02()
{
MyInteger myint;
cout << myint++ << endl;
cout << myint << endl;
}
int main()
{
test01();
test02();
system("pause");
return 0;
}
为什么我把ostream& operator<<(ostream& cout, MyInteger& my)改成ostream& operator<<(ostream& cout, MyInteger my)
我的test02中的第一个《就报错,正常来说不都是要用引用吗


  • aikogrgushdhka
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
报的什么错


2025-05-15 20:54:01
广告
  • 贴吧用户_a2SAJ3C
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
因为你写的友元函数是一个是一个接收左值引用的函数,而myint++返回的是一个右值,无法匹配到你写的函数
为了解决这个问题,你可以选择额外写一个
friend ostream& operator<<(ostream& os, MyInteger&& my);
版本的函数
或者把你原本的函数修改为这样的
friend ostream& operator<<(ostream& os, const MyInteger& my);
也可以把你的函数中的引用去掉,改为直接值传递参数
friend ostream& operator<<(ostream& os, MyInteger my);
由于你写的这个类是一个小类,直接值传递参数是个不错的选择


  • 叶仙帝
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
然后我可以利用new在堆区开辟内存让他变为左值就不会报错了


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 14回复贴,共1页
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示