2012-01-11 4 views
8

У меня есть следующий класс (prototipe):C++ станд :: stringstream оператор << перегрузки

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

И оператор реализован так:

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

Теперь я пытаюсь использовать его как это:

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

out << t; 

И VS дает мне ошибку, говоря, что нет матч для < <. В чем я ошибаюсь?

+0

Добро пожаловать на SO. Когда вы даете образцы кода, пожалуйста, сохраните их в одном компилируемом фрагменте кода. И * всегда * дают полные ошибки компилятора. – thiton

ответ

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

должен быть

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

просто вопрос, почему ostream, а не stringstream? из-за stringstream наследует оператор << из потока? также, является const обязательным? –

+0

@dtumaykin: 'const' не нужен, но это хороший стиль. 'ostream' - это класс выходных потоков, из которых вытекают' ostringstream' и 'stringstream'. –

+1

Обратите внимание на необходимость «друга» здесь: http://stackoverflow.com/questions/15777944/overloading-the-operator-error-c2804-binary-operator-has-too-many-param – VillasV

Смежные вопросы