我有以下运算符重载原型:
ostream& operator<<(ostream & outputstream, my_arr& arr)
my_arr operator+(const my_arr& left, const my_arr& right)
我打电话:
cout << (arr1 + arr2);
这给了我以下编译器错误:
error: no match for ‘operator<<’ in ‘std::cout << operator+(const my_array&, const my_array&)((*(const my_array*)(& y)))’
如果我更改&lt;&lt;&lt;&lt;以下内容:
ostream& operator<<(ostream & outputstream, const my_arr& arr)
我可能会遗漏一些基本的东西,但为什么会这样呢? 谢谢你的帮助。
答案 0 :(得分:4)
问题是当作为参考传递时,您不能传递“临时”(rvalue)对象,例如添加的结果。传递const引用时,C ++规则允许传递临时值,因为它保证不会被写入。
答案 1 :(得分:2)
如前所述,这是一个临时的(右值)。您还可以提供输出操作的重载,其形式为:
ostream& operator<<(ostream& outputstream, my_arr&& arr);
然后cout << (arr1 + arr2);
将使用。
答案 2 :(得分:1)
因为operator+
中有拼写错误,您还需要将const my_arr
传递给operator
my_array operator+(const my_arr& left, const my_arr& right)
^^^^ should be my_arr ^^^ need to be const
或者您必须为operator<<
my_array
ostream& operator<<(ostream & outputstream, my_arr& arr)
否则代码只会编译并运行OK:sample link