Bootstrap

在学习后置自增运算符重载时发现的问题

下面是完整代码: 

#include<iostream>
using namespace std;
class MyInteger
{
	friend ostream& operator<<(ostream& cout, MyInteger p);
public:
	MyInteger()
	{
		m_A = 10;

	}
	//前置自增运算符重载
	MyInteger& operator++()//返回引用是为了一直对一个数据进行操作
	{
		//先进行自增操作
		++m_A;
		//后返回本身
		return *this;

	}
	//后置自增运算符重载
	MyInteger operator++(int)//int表示占位参数,可以用于区分前置和后置自增运算符(不能用double或者其他数据类型)
		//不可以返回引用,因为返回的temp是局部变量,会被释放,返回局部变量后面的操作会是非法操作
	{
		//先记录当时结果
		MyInteger temp = *this;//不要写成MyInteger temp = m_A;m_A与temp数据类型不同

	    ++m_A;
		//最后将初始的结果进行返回
		return temp;
	}



private:
	int m_A;

};

ostream& operator<<(ostream& cout, MyInteger myint)
{
	cout << myint.m_A;//不用换行
	return cout;

}




void test()
{
	MyInteger p;
	cout<< p << endl;
}

void test01()
{
	MyInteger myint;
	cout << ++myint << endl;
	cout << myint << endl;
}
void test02()
{
	MyInteger myint;
	cout << myint++ << endl;
	cout << myint << endl;
}


int main()
{
	test();
	test01();
}

 下面是出现问题的局部代码:

ostream& operator<<(ostream& cout, MyInteger myint)
{
	cout << myint.m_A;//不用换行
	return cout;

}
ostream& operator<<(ostream& cout, MyInteger& myint)
{
	cout << myint.m_A;//不用换行
	return cout;

}
void test02()
{
	MyInteger myint;
	cout << myint++ << endl;
	cout << myint << endl;
}

第三张图为调用自增函数的代码

 第一张图设置的参数没有带引用,后置自增可以成功运行

而第二张图设置的参数带了引用,出现以下报错

暂时还不清楚是什么原因,如果有知道是什么原因的小伙伴,请分享一下下好吗~~

 

;