errore C2679: binario "> >" : nessun operatore trovato che accetta un operando di destra di tipo 'std :: string' (o non c'è conversione accettabile)

StackOverflow https://stackoverflow.com/questions/1631338

Domanda

Per favore, non confondere con il titolo poiché è già stato chiesto da qualcuno ma per un contesto diverso

Il codice seguente nel compilatore Visual C ++ (VS2008) non viene compilato, ma genera questa eccezione:

std::ifstream input (fileName);   

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

Ma questo codice si compila bene in cygwin g ++. Qualche pensiero?

È stato utile?

Soluzione

Hai incluso tutte le seguenti intestazioni?

  • < fstream >
  • < istream >
  • < iostream >
  • < stringa >

Suppongo che hai dimenticato < string > .

Nota a margine: dovrebbe essere std :: cout e std :: endl .

Altri suggerimenti

Aggiungendo a @sbi , nel mio caso la differenza stava includendo < string > invece di < string. h > (sotto VS 2017).

Vedi la seguente risposta: risposta caso simile

include < string >

Prova a includere il file di intestazione di stringa insieme al file < iostream > . Funzionerà in alcuni compilatori anche senza il < string > perché le impostazioni per diversi compilatori sono diverse ed è il compilatore che è responsabile della lettura dei file del preprocessore che iniziano con il simbolo '#' per generare un file obj.

Oltre a quello che hanno detto gli altri. Il seguente codice era necessario nella mia domanda per essere compilato con successo.

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

Un altro rimedio a questo è andare alle proprietà del progetto - > Generale - > Set di caratteri e scegliere " Set di caratteri multi-byte Ues " (Non è necessario utilizzare c_str () per generare la stringa)

Ci sono degli svantaggi nell'utilizzo di MBCS, quindi se hai intenzione di localizzare il tuo software, sconsiglierei questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top