2
void searchString(const string selection,const string filename)
{
    ifstream myfile;
    string sline;
    string sdata;
    myfile.open(filename);
    while(!myfile.eof())
    {
        getline(myfile,sline);
        sdata = sdata + sline;
    }

文字列filenameをmyfile.open(filename)として使用するにはどうすればよいですか?

最初は代わりにfile.txtを使用していましたが、文字列filenameなど、関数を渡す変数を使用すると、エラーが発生します。

myfile.open("file.txt");

エラーメッセージは次のとおりです。

main.cpp:203:25: error: no matching function for call to ‘std::basic_ifstream<char>::open(const string&)’
main.cpp:203:25: note: candidate is:
/usr/include/c++/4.6/fstream:531:7: note: void std::basic_ifstream<_CharT, _Traits>::open(const char*, std::ios_base::openmode) [with _CharT = char, _Traits = std::char_traits<char>, std::ios_base::openmode = std::_Ios_Openmode]
/usr/include/c++/4.6/fstream:531:7: note:   no known conversion for argument 1 from ‘const string {aka const std::basic_string<char>}’ to ‘const char*’
make: *** [main.o] Error 1
4

1 に答える 1

7

(使用しているC ++の特定の標準の)コンストラクターは引数をstd::ifstream::open許可しないため、次を使用する必要があります。std::string

 myfile.open(filename.c_str());

コンストラクターは、メンバー関数を使用してオブジェクトconst char *から取得できる型を想定しています。std::stringc_str()

于 2012-07-27T04:46:08.943 に答える