Maison >développement back-end >C++ >Pourquoi `ifstream::open(std::string)` échoue-t-il dans les anciennes versions C ?

Pourquoi `ifstream::open(std::string)` échoue-t-il dans les anciennes versions C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-10 03:17:10471parcourir

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

Aucune fonction de correspondance : ifstream::open(std::string)

Dans le code C contenant la ligne suivante :

file.open(name);

une erreur courante est :

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

Ce problème se pose car les anciennes versions de C (antérieures à C 11) ne prenaient pas en charge l'ouverture d'un fichier à l'aide d'un argument std::string. La fonction open() nécessitait un tableau de caractères ou une chaîne de style C.

Solution

Pour résoudre cette erreur, vous pouvez utiliser l'une des approches suivantes :

  • Convertissez la std::string en une chaîne de style C à l'aide de c_str() méthode :
file.open(name.c_str());
  • Utilisez le constructeur pour la classe ifstream, comme indiqué ci-dessous :
std::ifstream file(name.c_str());

Cette approche élimine le besoin de séparer la construction et ouverture.

De plus, pour s'assurer que la fonction loadNumbersFromFile() ne modifie pas son argument, il convient de passer par référence à une constante std::string à la place :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn