Ostream运算符strangley不接受我的堆栈指针

时间:2014-02-04 19:59:24

标签: c++ oop overloading operator-keyword

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

1 个答案:

答案 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>&);