web-dev-qa-db-ja.com

ファイルパスを開くときに文字列を使用する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>]
69
Mark

変化する

ifstream file(filename);

ifstream file(filename.c_str());

ifstreamのコンストラクターはconst char*、C++ 11より前のstringではありません。

135
Seth Carnegie

ifstreamコンストラクターは_const char*_を想定しているため、ifstream file(filename.c_str());を実行して機能させる必要があります。

12

c ++-11では、std :: stringにすることもできます。したがって、プロジェクトの方言をc ++-11に変更して(c ++-11をインストールし)、問題を解決することもできます。

2
evi v