重载ostream运算符的代码
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>&);
已解决:从来没有在我的代码中的某处使用Stack()
答案 0 :(得分:3)
您发布的错误
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>&);