Я открываю файл для чтения в C++ (Linux, Debian).
ifstream input ("readme");
Вышеупомянутые работы, но когда я пытаюсь:
string filename = "readme";
ifstream input (filename);
Я получаю error: no matching function for call to...
загрузки страницы, начиная с error: no matching function for call to...
Почему это не работает и как я могу использовать строковую переменную в качестве ввода имени файла?
Вы можете использовать:
string filename = "readme";
/* Convert filename to C string of type const char*
(null terminated) using c_str method
*/
ifstream input (filename.c_str());
Или используйте флаг С++ 11
-std=c++11
или -std=c++0x
Ссылка: c_str
Конструктор ifstream
и друзей, принимающих std::string
, был добавлен только в С++ 11, что означает, что вы должны использовать стандартную реализацию стандартной библиотеки С++ 11 или, по крайней мере, одну, которая поддерживает определенную функцию. См. Cppreference для получения дополнительной информации.
Чтобы иметь возможность использовать std::string
качестве имени файла в вашем случае, используйте std::string::c_str()
:
string filename = "readme";
ifstream input (filename.c_str());
Этот метод работает для более старых компиляторов, отличных от С++ 11.