我正在编写程序,需要实现的一件事是重载>>
运算符以一次读取一个点。我尝试过的:
std::istream& operator >>(std::istream& is, const Point& point)
{
double temp;
is >> temp;
point.setx(temp);
is.ignore(3,';');
is >> temp;
point.sety(temp);
is.ignore(3,';');
}
它为什么无法在VS2019中编译(如果很重要),并提示没有运算符>>
接受std::istream
和double
作为参数。任何类型的temp
仍然存在问题。是int
还是char*
,并且不取决于我是从istream
还是从ifstream
读取的。
这种行为和任何可能的孤独可能是什么原因?
答案 0 :(得分:1)
也许您忘记了#include <iostream>
?否则,您会希望得到一条错误消息,就像所引用的一样。
修复此问题后,我希望还会看到其他一些警告/错误。首先,即使point
似乎正在修改所传递的Point
(按预期),您还是通过引用const operator>>
来传递Point
。您可能要删除const
。
第二,您已声明operator>>
返回std::istream &
,但未返回任何内容。您可能想在结尾处添加return is;
。
此代码编译:
#include <iostream>
struct Point {
double x;
double y;
void setx(double x_) { x = x_; }
void sety(double y_) { y = y_; }
};
std::istream& operator >>(std::istream& is, Point& point)
{
double temp;
is >> temp;
point.setx(temp);
is.ignore(3,';');
is >> temp;
point.sety(temp);
is.ignore(3,';');
return is;
}