2009-10-27 7 views
22

Veuillez ne pas confondre avec le titre tel qu'il était déjà demandé par quelqu'un, mais pour un autre contexteerreur C2679: binaire '>>': aucun opérateur trouvé qui prend un opérande de droite de type 'std :: string' (ou il n'y a pas de conversion acceptable)

Le code ci-dessous dans le compilateur Visual C++ (de VS2008) ne reçoit pas compiles, au lieu, il jette cette exception:

std::ifstream input (fileName); 

while (input) { 
    string s; 
    input >> s; 
    cout << s << endl; 
}; 

mais ce code compile bien dans Cygwin g ++ . Des pensées?

+1

S'il vous plaît poster la source complète. – dirkgently

Répondre

56

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

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

Je pense que vous avez oublié <string>. Sur une note de côté: Cela devrait être std::cout et std::endl.

+1

Vous avez raison .. J'ai raté , ne pensez-vous pas que ce message d'erreur est totalement trompeur. Je ne peux pas relier ce message d'erreur avec le correctif que vous avez mentionné. Très étrange!! – asyncwait

+5

@Vadi: Très probablement 'std :: string' est défini dans un autre en-tête que vous avez déjà inclus, mais l'opérateur ne l'est pas. Le compilateur accepte donc 'chaîne s;', mais pas l'invocation de l'opérateur de flux. – sbi

+0

Vous n'avez pas besoin de spécifier 'std :: cout'. Si vous utilisez 'using namespace std;', alors simplement 'cout' suffit. –

0

Ajouter à @sbi réponse, dans mon cas, la différence a été compris <string> au lieu de <string.h> (sous VS 2017).

Voir la réponse suivante: similar case answer

Hope it helps.

Cheers,

Guy.