ホームページ >バックエンド開発 >C++ >古い C バージョンで「ifstream::open(std::string)」が失敗するのはなぜですか?

古い C バージョンで「ifstream::open(std::string)」が失敗するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-10 03:17:10470ブラウズ

Why Does `ifstream::open(std::string)` Fail in Older C   Versions?

一致する関数がありません: ifstream::open(std::string)

次の行を含む C コード:

file.open(name);

よくあるエラーis:

no matching function for call 'std::ifstream::open(std::string&)'

この問題は、古いバージョンの C (C 11 より前) が std::string 引数を使用してファイルを開くことをサポートしていなかったために発生します。 open() 関数には、文字配列または C スタイルの文字列が必要でした。

解決策

このエラーを解決するには、次のいずれかの方法を使用できます。 :

  • c_str() を使用して std::string を C スタイルの文字列に変換します。 Method:
file.open(name.c_str());
  • 次に示すように、ifstream クラスのコンストラクターを利用します。
std::ifstream file(name.c_str());

このアプローチでは、構築とメソッドを分離する必要がなくなります。

さらに、loadNumbersFromFile() 関数がそのファイルの内容を変更しないようにするため、引数を指定する場合は、代わりに定数 std::string への参照によって渡すことをお勧めします:

std::vector<int> loadNumbersFromFile(const std::string& name)
{
    // ...
}

以上が古い C バージョンで「ifstream::open(std::string)」が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。