gpt4 book ai didi

c++ - 没有运算符 >> 匹配这些操作数

转载 作者:搜寻专家 更新时间:2023-10-31 00:40:24 24 4
gpt4 key购买 nike

我一直在尝试重载 >>> 运算符。我有一个有两个私有(private)变量的类:

Class Complex
{
private:
double real;
double imaginary;
};

此外,我还有一个重载 >>> 运算符的友元函数:

friend istream & operator>>(istream &is, Complex &c)

在函数的实现中,我尝试了很多方法来写入对象 c 的变量,但我一直收到错误 no operator >> matches these operands

我环顾四周,读到我需要写入变量的 reference,所以我尝试了以下操作:

istream & operator>>(istream &is, Complex &c)
{
using std::cout;
double &r = c.real;
cout << "real: " << is >> r;
return is;
}

但是这仍然给我同样的错误。我有点困惑,因为我尝试了 is >> c.real 但没有成功。

在一个类似的 SO 问题的答案中,有人建议写入局部变量并设置对象变量,例如:

double d;
cin >> d;
setReal(d);

我试图找到一种更简单的方法来实现这一点,而不是使用方法或将变量设置为本地变量。

解决方案可能很简单,但我真的只是 C++ 的初学者,所以请放轻松 :P。

测试用例:

using std::cin;
Complex c;
cin >> c;

确切的错误信息:

Error   1   error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::basic_ostream<_Elem,_Traits>' (or there is no acceptable conversion)

最佳答案

错误在这一行:

cout << "real: "  << is >> r;

这被解释为

((cout << "real: ") << is) >> r

这里的问题是你不能像这样从输出切换到 cout 并从 is 开始读取。一个更好的方法是

cout << "real: ";
is >> r;

也就是说,这是一个非常糟糕的主意。你不应该让 operator >> 显示提示,因为这意味着如果你想从文件中读入你的类型的对象,每次你这样做都会得到提示“real”显示在屏幕上。您应该让 operator >> 只读取表示形式,并在读取之前明确提示您是否想要这样做。

希望这对您有所帮助!

关于c++ - 没有运算符 >> 匹配这些操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14791132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com