Код для перегруженного операционного оператора
template<class T>
ostream& operator<< (ostream& streamer,Stack<T>& stack)
{
if(stack.isEmpty())
{
streamer << "[]";
}
else
{
Stack<T> tStack = stack;
streamer << "[";
while(tStack.top!=NULL)
{
streamer << tStack.top->element;
tStack.top = tStack.top -> next;
if(tStack.top)
streamer << ",";
}
streamer << "]";
}
return streamer;
}
Ошибка довольно длинная, вот ссылка.... http://pastebin.com/qt4WTEiV
Я также проверил функцию, подобную этой...
Stack<int> *s1 = new Stack<int>();
cout << "Pushing...." << endl;
s1->push(1);
s1->push(2);
s1->push(3);
s1->push(4);
s1->push(5);
cout<< *s1 << endl;
функция друга...
friend ostream& operator<< <T>(ostream&,Stack<T>&);
SOLVED: никогда не было ~ Stack() где-то в моем коде
ошибка, отправленная вами
Stack.C: 37: 10: ошибка: нет соответствия для 'operator * (тип операнда -' std :: ostream {aka std :: basic_ostream}) return * streamer;
говорит, что вы ostream
, что неверно. Измените это, чтобы вернуть ссылку на ostream
:
return streamer;
и также убедитесь, что другие операции вывода, используемые в ostream& operator<< (ostream& streamer,Stack<T>& stack)
как
streamer << tStack.top->element;
tStack.top = tStack.top -> next;
четко определены. Наконец, декларация
friend ostream& operator<< <T>(ostream&,Stack<T>&);
следует изменить на:
template<class T>
friend ostream& operator<< (ostream&,Stack<T>&);