2012-01-11 19 views
8

que tienen la siguiente clase (Prototipo):C++ std :: stringstream operador << sobrecarga

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

Y el operador se implementa como esto:

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

Ahora, estoy tratando de utilizar de esta manera:

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

out << t; 

y VS me da error, diciendo que no hay ninguna coincidencia para < < operador. ¿En qué me equivoco?

+0

Bienvenido a SO. Cuando proporcione ejemplos de código, consérvelos como un único código compilable. Y * siempre * brindan los errores completos del compilador. – thiton

Respuesta

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

debería ser

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

solo una pregunta, por qué ostream, y no stringstream? porque stringstream está heredando el operador << from ostream? también, ¿es const obligatorio? –

+0

@dtumaykin: 'const' no es necesario, pero es un buen estilo. 'ostream' es la clase de flujos de salida, de la cual provienen' ostringstream' y 'stringstream'. –

+1

Observe la necesidad de 'amigo' aquí: http://stackoverflow.com/questions/15777944/overloading-the-operator-error-c2804-binary-operator-has-too-many-param – VillasV

Cuestiones relacionadas