Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2017, 20:29   #1
Aoizora
Заблокирован
 
Регистрация: 11.11.2016
Сообщений: 261
По умолчанию Перегрузка оператора вызова и чтение в нем из потока

Хочу написать функциональный объект, который при вызове читает строку из указанного потока. Код получился такой:


Код:
#include <iostream>

class ReadString
{
public:
	ReadString(std::istream &i = std::cin)
		: is(i) {}
	void operator()(std::string &s) const
	{
		is >> s;
	}
private:
	std::istream &is;
};

int main()
{

}
Но при компиляции возникает ошибка:

error C2678: binary '>>': no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion) в строке is >> s.

Что я сделал не так?
Aoizora вне форума Ответить с цитированием
Старый 16.04.2017, 21:24   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от Aoizora Посмотреть сообщение
Хочу написать функциональный объект, который при вызове читает строку из указанного потока. Код получился такой:


Код:
#include <iostream>

class ReadString
{
public:
	ReadString(std::istream &i = std::cin)
		: is(i) {}
	void operator()(std::string &s) const
	{
		is >> s;
	}
private:
	std::istream &is;
};

int main()
{

}
Но при компиляции возникает ошибка:

error C2678: binary '>>': no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion) в строке is >> s.

Что я сделал не так?
std::istream &is;

Член класса - ссылка. Вобщем и целом (кроме крайне редких случаев) - это не верно. Огребете проблем, если объект класса будет жить дольше ссылаемого объекта.

А вообще, у базового istream нет перегрузки в строку

http://www.cplusplus.com/reference/i...perator%3E%3E/
alexzk вне форума Ответить с цитированием
Старый 16.04.2017, 21:32   #3
Aoizora
Заблокирован
 
Регистрация: 11.11.2016
Сообщений: 261
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
std::istream &is;
А вообще, у базового istream нет перегрузки в строку

http://www.cplusplus.com/reference/i...perator%3E%3E/
Я пробовал заменить istream на std::cin, у которого есть нужная перегрузка, но ошибка так же самая.
Aoizora вне форума Ответить с цитированием
Старый 16.04.2017, 21:35   #4
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

хм...а g++ скомпилил норм, без ошибки
alexzk вне форума Ответить с цитированием
Старый 16.04.2017, 21:36   #5
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

#include <string>
мб забыли? :/ похорошему нада бы

там еще у вас сама функция const, а член нет ..правильно, g++ () не генерит, пока не использовано. Уберите const.

Последний раз редактировалось alexzk; 16.04.2017 в 21:38.
alexzk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка оператора [] C++ Cannibal Помощь студентам 1 21.05.2013 13:02
C++ Перегрузка оператора += и >> Jane-sad Помощь студентам 4 01.03.2013 15:38
Перегрузка оператора (C++) Sergey S Помощь студентам 6 08.01.2012 13:01
перегрузка оператора << z3rg Общие вопросы C/C++ 18 02.03.2010 02:58
Перегрузка оператора + z3rg Общие вопросы C/C++ 1 22.03.2009 03:06