ошибка чтения в строку
оператор >>, унаследованный ifstream'ом от istream'а отказывается записывать данные в string.
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: .....
Если кто сталкивался, подскажите от чего это может быть, хотя бы в какую сторону копать.
а тебе нужен класс ofstream (output file stream), вот как раз в нём и есть оператор <<
вот так всё работает(для Visual Studio):
#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()
и будет работать
собственно такой пример то запускается?
а что вообще за компилятор то используется? потому что в gcc (GNU Compiler Collection) и Visual Studio всё будет работать на ура
п.с. если используется gcc, то в Makefile прописан компилятор g++ надеюсь?
Вообще странное поведение оператора >>. Если заменить std::string на массив char, то всё работает.
там определен этот оператор
А ты пробовал включить этот инклуд в файл? ;)
Готов поспорить, что нет. А ты попробуй, вместо того, что бы спорить.
Такой пример:
#include <string>
int main()
{
std::ifstream file("test.txt");
std::string str;
file >> str;
return 0;
}
отлично компилируется gcc:
у тебя он компилируется?
у тебя он компилируется?
Нет. Ошибка точно такая же, какую я привёл в первом посте.
у тебя он компилируется?
g++ -Wall -o test test.cpp
-Wall - не обязательно, но желательно
MinGW это прекрасно съедает, так что разбирайтесь с конкретным компилятором и его настройками.
То, что говорил Green - не совсем корректно.
При выполнении этого:
создается объектный файл. А далее, при попытке создания исполнимого файла:
получаем ошибки:
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 и получить эти ошибки.
При выполнении этого:
создается объектный файл. А далее, при попытке создания исполнимого файла:
получаем ошибки:
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: .....
Ох уж эта хитрая терминология...
Терминология здесь не при чем, у топипакастера, дейсвительно, ошибка компиляции, а не линковки, как в твоем посте. Т.е. до описываемой тобой ощибки он ещё не дошел :)
При выполнении этого:
создается объектный файл. А далее, при попытке создания исполнимого файла:
получаем ошибки:
Можно сразу запустить gcc -o test test.cpp и получить эти ошибки.
Kogrom, я не настолько нагл чтобы тебя игнорировать :). MinGW тогда съел оба ваших варианта. И да, я запускал g++.
#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.