erreur C2679: binaire '> >' : aucun opérateur trouvé qui prend un opérande de droite du type 'std :: string' (ou il n'y a pas de conversion acceptable)
-
06-07-2019 - |
Question
Veuillez ne pas confondre le titre avec le titre car il a déjà été demandé par quelqu'un, mais pour un contexte différent
Le code ci-dessous dans le compilateur Visual C ++ (VS2008) n'est pas compilé, mais il lève cette exception:
std::ifstream input (fileName);
while (input) {
string s;
input >> s;
std::cout << s << std::endl;
};
Mais ce code est bien compilé en cygwin g ++. Des pensées?
La solution
Avez-vous inclus tous les en-têtes suivants?
-
< fstream >
-
< istream >
-
< iostream >
-
< chaîne >
Je suppose que vous avez oublié
.
Note: cela devrait être std :: cout
et std :: endl
.
Autres conseils
Ajoutant à la réponse @sbi , dans mon cas, la différence consistait à inclure < chaîne >
au lieu de < chaîne. h >
(sous VS 2017).
Voir la réponse suivante: réponse à un cas similaire
inclure < chaîne >
Essayez d'inclure le fichier d'en-tête de chaîne avec le fichier < iostream >
.
Cela fonctionnera dans certains compilateurs même sans le < chaîne >
car les paramètres des différents compilateurs sont différents et que c'est le compilateur qui est responsable de la lecture des fichiers de préprocesseur commençant par le symbole '#' afin de générer un fichier. Fichier obj.
En plus de ce que d'autres ont dit. Le code suivant était nécessaire dans mon application pour pouvoir compiler avec succès.
std::cout << s.c_str() << std::endl;
Une autre solution consiste à accéder aux propriétés du projet - > Général - > Caractère et choisissez "Ues Jeu de caractères multi-octets" (Vous n'aurez pas besoin d'utiliser c_str () pour afficher la chaîne)
L’utilisation de MBCS présente des inconvénients. Par conséquent, si vous envisagez de localiser votre logiciel, je vous le déconseille.