2012-01-11 16 views
8

Mam następujące klasy (prototipe):C++ std :: stringstream operator << przeciążenia

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

a operator jest realizowany tak:

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

Teraz usiłuję używać go tak:

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

out << t; 

i VS daje mi błąd, mówiąc, że nie ma odpowiednika dla < < operator. W czym się mylę?

+0

Witamy w SO. Kiedy podajesz próbki kodu, zachowaj je w jednym, nadającym się do kompilacji kodzie. I * zawsze * daje pełne błędy kompilatora. – thiton

Odpowiedz

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

powinny być

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

tylko pytanie, dlaczego ostream, a nie stringstream? ze względu na stringstream dziedziczy operator << od ostream? również, czy const jest obowiązkowe? –

+0

@dtumaykin: 'const' nie jest konieczne, ale jest to dobry styl. 'ostream' to klasa strumieni wyjściowych, z których wywodzą się' ostringstream' i 'stringstream'. –

+1

Przestrzegaj potrzeby "przyjaciela" tutaj: http://stackoverflow.com/questions/15777944/overloading-the-operator-error-c2804-binary-operator-has-too-many-param – VillasV

Powiązane problemy