为什么i(f)stream无法读取双精度

时间:2019-05-22 23:44:29

标签: c++ io

我正在编写程序,需要实现的一件事是重载>>运算符以一次读取一个点。我尝试过的:

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::istreamdouble作为参数。任何类型的temp仍然存在问题。是int还是char*,并且不取决于我是从istream还是从ifstream读取的。

这种行为和任何可能的孤独可能是什么原因?

1 个答案:

答案 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;
}