2012-01-11 43 views
8

Ho la seguente classe (prototipo):C++ std :: stringstream operatore << sovraccarico

class Token 
{ 
public: 
    //members, etc. 
    friend std::stringstream& operator<< (std::stringstream &out, Token &t); 
}; 

e l'operatore è implementata in questo modo:

std::stringstream & operator<< (std::stringstream &out, Token &t) 
{ 
    out << t.getValue(); //class public method 
    return out; 
} 

Ora, sto cercando di usare in questo modo:

std::stringstream out; 
Token t; 
//initialization, etc. 

out << t; 

E VS mi dà errore, dicendo che non v'è alcuna corrispondenza per <Operatore. In cosa mi sbaglio?

+0

Benvenuti a SO. Quando si forniscono esempi di codice, si prega di conservare un singolo codice compilabile. E * sempre * fornisce gli errori completi del compilatore. – thiton

risposta

12
std::stringstream & operator<< (std::stringstream &out, Token &t) 

dovrebbe essere

std::ostream & operator<< (std::ostream &out, Token const &t) 
+1

solo una domanda, perché ostream e non stringstream? a causa dello stringstream si eredita l'operatore << da ostream? inoltre, è obbligatorio? –

+0

@dtumaykin: 'const' non è necessario, ma è buono stile. 'ostream' è la classe dei flussi di output, da cui derivano' ostringstream' e 'stringstream'. –

+1

Osserva la necessità di 'amico' qui: http://stackoverflow.com/questions/15777944/overloading-the-operator-error-c2804-binary-operator-has-too-many-param – VillasV

Problemi correlati