此问题在此处已有答案:
How come a non-const reference cannot bind to a temporary object?(11个答案)
Error: cannot bind non-const lvalue reference of type ‘int&’ to an rvalue of type ‘int’(2个答案)
cannot bind non-const lvalue reference of type to an rvalue of type(1个答案)
5天前关闭。
我尝试重载运算符〈〈和++(post和pre)。这是我的代码的一部分,但是我得到错误“e0349:没有与这些操作数”“匹配的运算符。您能告诉我哪里出错了吗?(C++,VS2022)
#include <iostream>
#include <string>
using namespace std;
class K {
int x, y;
public:
K(int a, int b) :x(a), y(b) {};
K() :x(0), y(0) {};
K operator++(int);
K& operator++();
friend ostream& operator<< (ostream & str, K & obj);
};
K K::operator++(int) {
K temp(*this);
x += 1;
y += 1;
return temp;
}
K& K::operator++() {
x += 1;
y += 1;
return *this;
}
ostream& operator<<(ostream& str, K& obj) {
str << "[" << obj.x << ", " << obj.y << "]";
return str;
}
int main(int argc, char* argv[])
{
K obj{10, 20};
cout << obj++ << endl; //here I get error
cout << obj << endl;
cout << ++obj << endl;
}
1条答案
按热度按时间5cnsuln71#
简单地写后置运算符++,这样它返回一个
copy of the temporary value
,它可以被用作rvalue
,但是插入运算符的签名需要一个reference of the value
,它不知道如何检索作为副本传递的数据。这就是你应该如何修改提取运算符的重载函数:你只是告诉函数传递的值将有一个
constant reference
,它不会随时间而改变。所以这就好像你正在接受reference of the copy value
。我知道这是一个非常棘手的事情,但我应该已经足够清楚你的头脑