web-dev-qa-db-fra.com

erreur C2679: binaire '>>': aucun opérateur trouvé ne prend un opérande de droite 'type std :: string' (ou aucune conversion acceptable)

S'il vous plaît ne confondez pas avec le titre comme 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 se compile bien dans cygwin g ++. Des pensées?

27
asyncwait

Avez-vous inclus tous les en-têtes suivants? 

  • <fstream>
  • <istream>
  • <iostream>
  • <string>

À mon avis, vous avez oublié <string>

Sur une note de côté: Cela devrait être std::cout et std::endl.

75
sbi

En ajoutant @sbi réponse, dans mon cas, la différence consistait à inclure <string> au lieu de <string.h> (sous VS 2017).

Voir la réponse suivante: réponse à un cas similaire

2
Guy Avraham

En plus de ce que d'autres ont dit. Le code suivant était nécessaire dans mon application pour compiler avec succès.

std::cout << s.c_str() << std::endl;

Une autre solution consiste à aller dans les propriétés du projet -> Général -> Jeu de caractères et choisissez "Jeu de caractères multi-octets" (vous n'aurez pas besoin d'utiliser c_str () pour afficher la chaîne).

MBCS présente des inconvénients, donc si vous envisagez de localiser votre logiciel, je vous le déconseille.

0
Nick Delbar

include <string> 

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 <string> car les paramètres de 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 générer un fichier obj.

0
Akshat Bhatt