重载的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()

最佳答案

您发布的错误


  Stack.C:37:10:错误:“ operator *”不匹配(操作数类型为
  ‘std :: ostream {aka std :: basic_ostream}’)返回* 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>&);

关于c++ - Ostream运算符被勒索不接受我的堆栈指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21562150/

10-13 03:30