Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ошибка чтения в строку

34K
02 июня 2010 года
muturgan
96 / / 01.10.2009
Добрый день.
оператор >>, унаследованный ifstream'ом от istream'а отказывается записывать данные в string.
 
Код:
std::ifstream file("test.txt");
std::string str;
file >> str;

Возникат ошибка на этапе компиляции.
main.cpp:64: error: no match for 'operator>>' in 'file >> str'
/opt/host-gccuc-3.1/usr/include/istream:542: note: candidates are: .....

Если кто сталкивался, подскажите от чего это может быть, хотя бы в какую сторону копать.
2.1K
02 июня 2010 года
Norgat
452 / / 12.08.2009
ifstream - это класс для чтения данных(input file stream), т.е. для него опр. оператор >>

а тебе нужен класс ofstream (output file stream), вот как раз в нём и есть оператор <<
34K
02 июня 2010 года
muturgan
96 / / 01.10.2009
Опечатался. Конечно, >>
2.1K
02 июня 2010 года
Norgat
452 / / 12.08.2009
странно однако... если взят ifstream, то >> там быть должен(http://www.cplusplus.com/reference/iostream/istream/)

вот так всё работает(для Visual Studio):
Код:
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>

using namespace std;

void main()
{
    ifstream fin("test.txt");
    string buf;
    while(!fin.eof())
    {
        fin >> buf;
        cout << buf;
    }
    fin.close();
    _getch();
}

*для g++ убрать #include <conio.h> и _getch()
и будет работать

собственно такой пример то запускается?
34K
02 июня 2010 года
muturgan
96 / / 01.10.2009
Да, в том то и дело, что не работает. Никак.
2.1K
02 июня 2010 года
Norgat
452 / / 12.08.2009
Цитата: muturgan
Да, в том то и дело, что не работает. Никак.



а что вообще за компилятор то используется? потому что в gcc (GNU Compiler Collection) и Visual Studio всё будет работать на ура

п.с. если используется gcc, то в Makefile прописан компилятор g++ надеюсь?

34K
03 июня 2010 года
muturgan
96 / / 01.10.2009
Да, в visual studio всё работает, я знаю. Я использую gсс.
Вообще странное поведение оператора >>. Если заменить std::string на массив char, то всё работает.
3
03 июня 2010 года
Green
4.8K / / 20.01.2000
#include <string>

там определен этот оператор
34K
11 июня 2010 года
muturgan
96 / / 01.10.2009
Все подобные варианты я уже проверил, дело не в этом. И если бы не был подключен <string>, то ошибка вылезла бы при попытке создать объект, код ошибки я в своём первом посте приложил.
3
11 июня 2010 года
Green
4.8K / / 20.01.2000
Цитата: muturgan
Все подобные варианты я уже проверил, дело не в этом. И если бы не был подключен <string>, то ошибка вылезла бы при попытке создать объект, код ошибки я в своём первом посте приложил.



А ты пробовал включить этот инклуд в файл? ;)
Готов поспорить, что нет. А ты попробуй, вместо того, что бы спорить.

34K
15 июня 2010 года
muturgan
96 / / 01.10.2009
Вот Вы готовы спорить, даже не разобравшись в чём дело. В том-то и дело что один и тот же мой код прекрасно работает в VS, но почему-то отказывается компилиться gcc-шником.
3
15 июня 2010 года
Green
4.8K / / 20.01.2000
Цитата: muturgan
Вот Вы готовы спорить, даже не разобравшись в чём дело. В том-то и дело что один и тот же мой код прекрасно работает в VS, но почему-то отказывается компилиться gcc-шником.



Такой пример:

Код:
#include <fstream>
#include <string>

int main()
{
    std::ifstream file("test.txt");
    std::string str;
    file >> str;

    return 0;
}

отлично компилируется gcc:
 
Код:
gcc -c test.cpp

у тебя он компилируется?
34K
16 июня 2010 года
muturgan
96 / / 01.10.2009
Цитата: Green

у тебя он компилируется?


Нет. Ошибка точно такая же, какую я привёл в первом посте.

87
16 июня 2010 года
Kogrom
2.7K / / 02.02.2008
Цитата: Green

 
Код:
gcc -c test.cpp

у тебя он компилируется?



g++ -Wall -o test test.cpp

-Wall - не обязательно, но желательно

14
18 июня 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: muturgan
Нет. Ошибка точно такая же, какую я привёл в первом посте.


MinGW это прекрасно съедает, так что разбирайтесь с конкретным компилятором и его настройками.

87
18 июня 2010 года
Kogrom
2.7K / / 02.02.2008
Цитата: Phodopus
MinGW это прекрасно съедает



То, что говорил Green - не совсем корректно.

При выполнении этого:

 
Код:
gcc -c test.cpp

создается объектный файл. А далее, при попытке создания исполнимого файла:
 
Код:
gcc -o test test.o

получаем ошибки:
 
Код:
test.o: In function `main':
test.cpp:(.text+0x35): undefined reference to `std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(char const*, std::_Ios_Openmode)'
test.cpp:(.text+0x41): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()'
....


Можно сразу запустить gcc -o test test.cpp и получить эти ошибки.
3
18 июня 2010 года
Green
4.8K / / 20.01.2000
Цитата: Kogrom
То, что говорил Green - не совсем корректно.

При выполнении этого:
 
Код:
gcc -c test.cpp

создается объектный файл. А далее, при попытке создания исполнимого файла:
 
Код:
gcc -o test test.o

получаем ошибки:
 
Код:
test.o: In function `main':
test.cpp:(.text+0x35): undefined reference to `std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(char const*, std::_Ios_Openmode)'
test.cpp:(.text+0x41): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()'
....


Можно сразу запустить gcc -o test test.cpp и получить эти ошибки.



Вот только на грина не гоните!
Читаем топик:

Цитата:

Возникат ошибка на этапе компиляции.
main.cpp:64: error: no match for 'operator>>' in 'file >> str'
/opt/host-gccuc-3.1/usr/include/istream:542: note: candidates are: .....

87
18 июня 2010 года
Kogrom
2.7K / / 02.02.2008
Цитата: Green
Вот только на грина не гоните!



Ох уж эта хитрая терминология...

3
18 июня 2010 года
Green
4.8K / / 20.01.2000
Цитата: Kogrom
Ох уж эта хитрая терминология...



Терминология здесь не при чем, у топипакастера, дейсвительно, ошибка компиляции, а не линковки, как в твоем посте. Т.е. до описываемой тобой ощибки он ещё не дошел :)

14
18 июня 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: Kogrom
То, что говорил Green - не совсем корректно.
При выполнении этого:
 
Код:
gcc -c test.cpp

создается объектный файл. А далее, при попытке создания исполнимого файла:
 
Код:
gcc -o test test.o

получаем ошибки:
Можно сразу запустить gcc -o test test.cpp и получить эти ошибки.


Kogrom, я не настолько нагл чтобы тебя игнорировать :). MinGW тогда съел оба ваших варианта. И да, я запускал g++.

350
18 июня 2010 года
cheburator
589 / / 01.06.2006
Цитата: Green
Такой пример:
Код:
#include <fstream>
#include <string>

int main()
{
    std::ifstream file("test.txt");
    std::string str;
    file >> str;

    return 0;
}



Автору топика: предлагаю такой краш-тест: возьми этот код и закомментируй file>>str, если компилится, то проблема именно в операторе, если нет - в чём-то другом, хоть какая-то определённость...
Ещё тест. Попробуй using namespace std. Потому что у меня впечатление, что operator >> определён внутри пространства имён std и тупой компилер его не видит без using namespace.

34K
22 июня 2010 года
muturgan
96 / / 01.10.2009
Да, проблемы действительно в конкретном компиляторе. Всё решилось добавлением
 
Код:
#include <iostream>
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог