1. ホーム
  2. c++

[解決済み] no matching function ifstream error を修正する方法は?重複

2022-02-14 18:22:46

質問

エラー(下記)を修正する方法がわかりません。どなたか教えてください。

ちなみに、VS2012では正常に動作していますが、Linuxのターミナルで実行すると、このようなエラーが発生します。

というエラーが発生します。

<ブロッククオート

Librarian.cpp:20: error: no matching function for call to 'std::basic_ifstream >::basic_ifstream(s td::string&, const std::_Ios_Openmode&)' です。

Librarian.cpp。

bool Librarian::addBooks(string file)
{
    ifstream infile(file);
    if (!infile) 
    {
        cerr << "File could not be opened." << endl;
        return false;
    }

    for (;;) {
        char s[MAX];
        infile.getline(s, MAX);
        if (infile.eof()) break;
        cout << s << endl;
    }
    return true;
}

解決方法は?

によると std::basic_ifstream このコンストラクタは string& C++11以前は、この関数が受け取るのは const char * . 一番簡単な解決方法は

 ifstream infile(file.c_str());

std::string::c_str() は、コンストラクタで使用できるように、文字列の基礎となる文字ポインタを取得します。あるいは、コメントにあるようにC++11を使うこともできますが、コンパイラのバージョンに依存します(あなたのコンパイラはそれをサポートしていないようです)。