提问人:Tahmid Kawser Washee 提问时间:7/26/2023 最后编辑:machine_1Tahmid Kawser Washee 更新时间:7/26/2023 访问量:55
C++:“'operator<<'不匹配(操作数类型为'std::ostream'和'Complex')”
C++: "No match for 'operator<<' (operand types are 'std::ostream' and 'Complex')"
问:
我正在尝试使用 C++ 中的自定义 Max 函数比较和打印两个复杂对象。Complex 类重载了运算符>>和运算符<<,我还定义了一个布尔运算符>以根据它们的大小来比较两个 Complex 对象。但是,当我尝试使用 Max<Complex> 函数查找两个 Complex 对象的最大值并打印结果时,我遇到了错误:
“'operator<<'不匹配(操作数类型为'std::ostream'和'Complex')”。
#include<bits/stdc++.h>
using namespace std;
class Complex
{
int real;
int img;
public:
bool operator>(Complex &a)
{
if(this->real*this->real + this->img*this->img > a.real*a.real + a.img*a.img)
return 1;
return 0;
}
friend istream& operator>>(istream &in, Complex &e);
friend ostream& operator<<(ostream &out, Complex &e);
};
istream& operator>>(istream &in, Complex &e)
{
in >> e.real;
in >> e.img;
return in;
}
ostream& operator<<(ostream &out, Complex &e)
{
out << e.real << "+ i" << e.img;
return out;
}
template<class T> T Max(T a,T b)
{
return (a>b)? a: b;
}
int main()
{
Complex a,b;
cin >> a >> b;
cout << Max<Complex>(a,b);
}
我找不到这个错误背后的原因。
答:
4赞
Vlad from Moscow
7/26/2023
#1
问题是该函数返回一个临时对象Max
template<class T> T Max(T a,T b)
{
return (a>b)? a: b;
}
但是,根据其声明,期望左值引用operator <<
friend ostream& operator<<(ostream &out, Complex &e);
^^^^^^^^^^
不能将临时对象绑定到非常量左值引用。
声明运算符,如
friend ostream& operator<<(ostream &out, const Complex &e);
//...
ostream& operator<<(ostream &out, const Complex &e)
{
out << e.real << "+ i" << e.img;
return out;
}
即为第二个参数的引用类型指定限定符。const
评论