web-dev-qa-db-fra.com

Aucune fonction correspondante - ifstream ouvert ()

Ceci est la partie du code avec une erreur:

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;
}

Et bien, j'ai un peu aucune idée de ce qui se passe. Le tout est compilé correctement dans vs. Cependant, j'ai besoin de compiler cela avec Dev CPP.

J'ai commenté la ligne de lancement des erreurs dans le code ci-dessus. Les erreurs sont:

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

Dans différentes parties du code, je reçois des erreurs comme numeric_limits is not a member of std Ou max() has not been declared, bien qu'ils existent dans iostream classe et tout fonctionne dans vs.


Pourquoi suis-je cette erreur?

18
user2252786

Changer de:

file.open(name.c_str());

ou utilisez simplement le constructeur car il n'y a aucune raison de séparer la construction et ouverte:

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

Prise en charge de std::string Argument a été ajouté à C++ 11.

Comme loadNumbersFromFile() ne modifie pas son argument passe par std::string const& Pour documenter ce fait et éviter une copie inutile.

38
hmjd