【发布时间】:2019-02-14 07:24:23
【问题描述】:
为什么cout 不能在重载 C++ 的 istream 运算符的函数中工作(>>)?我应该怎么做才能让它工作?
在这一行:cout >> "Enter x and y: " 显示错误?
为什么?
我该如何解决?
这是overload >> 和operator << 的代码
#include<iostream>
using namespace std;
class myClass
{
int x,y;
public:
myClass(int a,int b)
{
x=a;y=b;
}
friend istream &operator>>(istream &in, myClass &ob);
friend ostream &operator<<(ostream &out, myClass ob);
};
istream &operator>>(istream &in,myClass &ob)
{
cout >> "Enter x and y: ";
in >> ob.x;
in >> ob.y;
return in;
}
ostream &operator<<(ostream &out,myClass ob)
{
out << ob.x << " " << ob.y << endl;
}
int main()
{
myClass ob(10,20);
cout << ob;
cin >> ob;
cout << ob;
}
【问题讨论】:
-
在询问有关错误的问题时,请始终包括您遇到的实际错误。将它们(作为文本)完整地复制粘贴到问题中。然后在代码中添加 cmets 以显示错误发生的位置。另外请花一些时间阅读how to ask good questions 和this question checklist。
-
cout是一个输出流,所以支持<<但不支持>>。您正在使用无效的>>。投票结束,因为这本质上是一个错字(修复两个字符)。此外,将输出操作放在operator>>()的实现中并不是一个好主意——就流而言,从一个流读取应该独立于写入另一个流。而是在使用operator>>()之前编写提示。如果要提示输入,请编写一个单独的函数来提示一个流并从另一个流中读取。 -
>>运算符不应该以任何方式与用户交互。假设你想从一个文件中读取一堆对象——你真的希望你的程序在每次读取其中一个对象时打印一个提示吗? -
你的重载是无关紧要的;
int main() { cout >> "Enter x and y: ";}也会遇到同样的问题。阅读minimal reproducible example。
标签: c++ operator-overloading cout istream