no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&)'
Je suis en train d'écrire un programme qui demande à l'utilisateur un nom de fichier et puis il ouvre ce fichier. Quand je compile, je reçois le message d'erreur suivant:
no matching function for call to std::basic_ofstream<char,
std::char_traits<char> >::basic_ofstream(std::string&)
C'est mon code:
using namespace std;
int main()
{
string asegurado;
cout << "Nombre a agregar: ";
cin >> asegurado;
ofstream entrada(asegurado,"");
if (entrada.fail())
{
cout << "El archivo no se creo correctamente" << endl;
}
}
Vous devez vous connecter pour publier un commentaire.
std::ofstream
ne peut être construit avec unstd::string
si vous avez le C++11 ou plus. En règle générale, cela se fait avec-std=c++11
(gcc, clang). Si vous n'avez pas accès à c++11, alors vous pouvez utiliser lec_str()
fonction destd::string
pour passer unconst char *
à laofstream
constructeur.Aussi comme Ben a souligné vous utilisez une chaîne vide pour le deuxième paramètre du constructeur. Le deuxième paramètre si proivided doit être de type
ios_base::openmode
.Avec tout cela, votre code doit être
ou
Je vous conseille aussi de lire: Pourquoi le “using namespace std;” considéré comme une mauvaise pratique?
c_str()
? Je n'ai jamais utilisé avant.c_str()
à " ofstream entrada(asegurado); et il fonctionne très bien, maintenant, je vais lire pourquoi est-using namespace std;" considéré comme une mauvaise pratique. Merci beaucoup pour tout! GratsVotre constructeur
ofstream entrada(asegurado,"");
, ne correspond pas à celui destd::ofstream
. Le deuxième argument doit être unios_base
, voir ci-dessous:Pour obtenir votre programme en cours d'exécution, il vous suffit de supprimer le littéral de chaîne à partir de votre
ofstream
constructeur:Voir le live exemple ici.
Si vous utilisez
c++03
ou inférieur, alors vous ne pouvez pas passer unstd::string
le constructeur deofstream
vous aurez besoin de passer une chaîne c: