errore C2679: binario "> >" : nessun operatore trovato che accetta un operando di destra di tipo 'std :: string' (o non c'è conversione accettabile)
-
06-07-2019 - |
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?
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.