19

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

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 で機能します。


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

4

1 に答える 1

45

への変更:

file.open(name.c_str());

または、構築とオープンを分離する理由がないため、単にコンストラクターを使用します。

std::ifstream file(name.c_str());

std::string引数のサポートは c++11 で追加されました。

AsloadNumbersFromFile()はその引数を変更せず、そのstd::string const&事実を文書化し、不要なコピーを避けます。

于 2013-05-14T21:01:02.003 に答える