Почему я (F) поток не может прочитать двойной - PullRequest
0 голосов

Я пишу программу, и нужно было реализовать одну вещь - перегрузить оператор >> для одновременного чтения точки. Что я пробовал:

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.

В чем может быть причина такого поведения и возможного решения?

1 Ответ

1 голос
/ 23 мая 2019

Возможно, вы забыли #include <iostream>?Без этого вы ожидаете получить сообщение об ошибке, подобное тому, которое вы цитировали.

Как только вы это исправите, я ожидаю увидеть пару других предупреждений / ошибок.Во-первых, вы передаете point по ссылке на const Point, хотя 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...