Ошибка C++ ifstream при использовании строки в качестве пути открытия файла.

У меня есть:

string filename: 
ifstream file(filename);

Компиляторы жалуются на несоответствие между файлом ifstream и строкой. Мне нужно преобразовать имя файла во что-то?

Вот ошибка:

error: no matching function for call to ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(std::string&)’
/usr/include/c++/4.4/fstream:454: note: candidates are: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]

person Mark    schedule 12.06.2011    source источник
comment
Я уверен, что вы могли бы улучшить название этого вопроса.   -  person Lightness Races in Orbit    schedule 12.06.2011
comment
Я изменил его на ошибку ifstream.   -  person Mark    schedule 12.06.2011
comment
Это все еще невероятно расплывчато. Разве вы не можете сделать так, чтобы он действительно описывал конкретную проблему?   -  person Lightness Races in Orbit    schedule 12.06.2011


Ответы (3)


Изменять

ifstream file(filename);

to

ifstream file(filename.c_str());

Потому что конструктор для ifstream принимает const char*, а не string до C++11.

person Seth Carnegie    schedule 12.06.2011
comment
очень люблю с++! - person MajesticRa; 30.04.2019

Конструктор ifstream ожидает const char*, поэтому вам нужно выполнить ifstream file(filename.c_str());, чтобы он заработал.

person Alexander Gessler    schedule 12.06.2011

в С++-11 это также может быть std::string. Таким образом (установка С++-11 и) изменение диалекта вашего проекта на С++-11 также может решить проблему.

person evi v    schedule 05.01.2016
comment
пока ваш ответ правильный, он уже присутствует в принятом ответе, хотя и не так явно: not a string pre-C++11. - person Chris Maes; 06.01.2016