本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net
记录一下自己关于递增运算符重载的错误
源代码:
#include<iostream>
#include<string>
using namespace std;
class myInt
{
friend ostream& operator<<(ostream& cout, myInt &a);
public:
myInt()
{
m_num = 0;
}
//前置++运算符
myInt& operator++() //返回引用是因为内置++(++a)是一直对一个数据做递增操作
{
//先++
m_num++;
//再返回
return *this;
}
//后置++运算符
myInt operator++(int)//后置递增返回的是值,如果是引用就是非法操作 //int代表占位参数,可以用于区分前置/后置
{
myInt temp= *this;
m_num++;
return temp;
}
private:
int m_num;
};
ostream& operator<<(ostream &cout, myInt &a)
{
cout << a.m_num ;
return cout;
}
void tast002()
{
myInt a;
cout << a++ << endl;
cout << a << endl;
}
int main()
{
tast002();
system("pause");
return 0;
}
报错
错误 (活动) E0349 没有与这些操作数匹配的 “<<” 运算符
错误 C2679 二进制 “<<”: 没有找到接受“myInt” 类型的右操作数的运算符(或没有可接受的转换)
错误点
同样使用引用前置递增这样没有发生错误,但是后置递增却会报错,猜想是否因为前置递增返回的是一个引用,但是后置递增返回的是一个值,所以前面也要是一个值。