web-dev-qa-db-ja.com

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

これはエラーのあるコードの一部です:

_std::vector<int> loadNumbersFromFile(std::string name)
{
    std::vector<int> numbers;

    std::ifstream file;
    file.open(name); // the error is here
    if(!file) {
        std::cout << "\nError\n\n";
        exit(EXIT_FAILURE);
    }

    int current;
    while(file >> current) {
        numbers.Push_back(current);
        file.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    return numbers;
}
_

そして、まあ、私は何が起こっているのかちょっとわかりません。すべてがVSで正しくコンパイルされます。ただし、これをdev cppでコンパイルする必要があります。

上記のコードでエラーをスローする行をコメントアウトしました。エラーは次のとおりです。

_no matching function for call 'std::basic_ifstream<char>::open(std::string&)
no matching function for call 'std::basic_ofstream<char>::open(std::string&)
_

コードのさまざまな部分で、_numeric_limits is not a member of std_またはmax() has not been declaredなどのエラーが発生しますが、それらはiostreamクラスに存在し、すべてがVSで機能します。


このエラーが発生するのはなぜですか?

18
user2252786

への変更:

_file.open(name.c_str());
_

または、コンストラクタを使用して、構造を分離して開く理由がないため、

_std::ifstream file(name.c_str());
_

_std::string_引数 のサポートがc ++ 11で追加されました。

loadNumbersFromFile()は_std::string const&_による引数の受け渡しを変更しないので、その事実を文書化し、不要なコピーを回避します。

38
hmjd