C++ 无操作员>&燃气轮机;匹配这些操作数

C++ 无操作员>&燃气轮机;匹配这些操作数,c++,iostream,istream,C++,Iostream,Istream,我一直在试图使>操作符过载。我有一个类,它有两个私有变量: Class Complex { private: double real; double imaginary; }; 此外,我还有一个friend函数,用于重载>运算符: friend istream & operator>>(istream &is, Complex &c) 在函数的实现过程中,我尝试了许多方法写入objectc的变量,但是我不断得到一个错误no operato

我一直在试图使
>
操作符过载。我有一个类,它有两个私有变量:

Class Complex
{
 private:
    double real;
    double imaginary;
};
此外,我还有一个friend函数,用于重载
>
运算符:

friend istream & operator>>(istream &is, Complex &c)
在函数的实现过程中,我尝试了许多方法写入object
c
的变量,但是我不断得到一个错误
no operator>>匹配这些操作数

我环顾四周,读到我需要写入变量的
引用
,因此我尝试了以下方法:

istream & operator>>(istream &is, Complex &c)
{
using std::cout;
double &r = c.real;
cout << "real: "  << is >> r;
    return is;
}
我试图找到一种更简单的方法来实现这一点,而不是使用方法或将变量设置为局部变量

这个解决方案可以是简单的,但我只是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)
错误1错误C2678:二进制'>>':未找到接受“std::basic_ostream”类型左侧操作数的运算符(或没有可接受的转换)

错误在这一行:

cout << "real: "  << is >> r;
cout << "real: "  << is >> r;
也就是说,这是一个非常糟糕的主意。您不应该让
操作员>>
显示提示,因为这意味着如果您想从文件中读入您类型的对象,每次这样做时,屏幕上将显示提示“
real
”。您应该让
operator>>
只需阅读表示,并在阅读之前明确提示您是否需要这样做


希望这有帮助

错误在这一行:

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

你的意思是在最后一个上使用>吗?因为您使用了>>,所以它试图将“is”写入cout,但是没有重载运算符。您可以构造一个?目前,还不清楚错误消息到底对应什么。我对SSCCE不太熟悉。你的意思是你想让我展示一些东西,比如:复数c;cout>c;你知道C++标准库已经有了吗?它会有助于看到一个独立的示例代码,还有当你试图编译它时得到的确切错误信息。@JoachimPileborg是的,但这是一本书中的练习,建议不要使用C++中的复数,我只是在你发布答案前几秒钟将它改为你所说的,哈哈。但是谢谢:)
cout << "real: "  << is >> r;