返回信息流想要输出链式队列的元素,但是重载<<函数怎么改都有问题,求大神指点正确写法
这是一条镜像帖。来源:北邮人论坛 / cpp / #95937同步于 2017/8/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
渣新求问输出队列元素时遇到的问题
tusiyun
2017/8/6镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
貌似是友元运算符没有声明,你虽然在类内对运算符进行了定义,但是这只是保障<<可以访问类内成员。换句话说,你需要在使用<<之前对重载的运算符进行声明。
个人看法,如果不对请指正。
【 在 specops (Perfec) 的大作中提到: 】
: 写在类内参数就不需要左操作数 写在类外才需要 简单来说
通过『我邮2.0』发布
因为你没提供Node<T>的实现,我只能自己按照你的写法写了一个,大致写法都一样,没发现出什么错啊,你可以看一眼Node<T>有没有问题,或者提供一下你的报错的点在哪里
```
#include<iostream>
using namespace std;
template <class T>
class Node
{
public:
Node<T>* next;
T data;
Node(T d)
{
data = d;
next = NULL;
}
};
template <class T>
class LinkedQueue
{
private:
Node<T> *front, *rear;
public:
LinkedQueue();
void enqueue(T);
T dequeue();
friend ostream& operator<<(ostream& out, LinkedQueue<T>& list)
{
out<<"(";
for(auto p = list.front; p!=NULL; p=p->next)
{
out<<p->data;
if(p->next)
out<<",";
}
out<<")";
return out;
}
};
template <class T>
LinkedQueue<T>::LinkedQueue()
{
front = rear = NULL;
}
template <class T>
void LinkedQueue<T>::enqueue(T x)
{
auto t = new Node<T>(x);
if(front)
rear->next = t;
else
front = t;
rear = t;
}
template <class T>
T LinkedQueue<T>::dequeue()
{
if(!front)
{
throw("empty");
}
auto r = front->data;
auto p = front;
front = front->next;
delete p;
return r;
}
int main()
{
LinkedQueue<int> t;
t.enqueue(1);
t.enqueue(2);
cout<<t<<endl;
cout<<t.dequeue()<<endl;
cout<<t<<endl;
return 0;
}
```
【 在 tusiyun 的大作中提到: 】
: 贴了
Node<T>没有问题,编译没问题但是一旦运行就是停不下来的满屏数字。。
【 在 Nroskill 的大作中提到: 】
: 因为你没提供Node<T>的实现,我只能自己按照你的写法写了一个,大致写法都一样,没发现出什么错啊,你可以看一眼Node<T>有没有问题,或者提供一下你的报错的点在哪里
: [md]
: ```
: ...................
Node<T>的构造函数里有没有```next = NULL```?这句不能少。
如果有的话就把全部代码打包发上来吧,得手动debug看看错在哪里
【 在 tusiyun 的大作中提到: 】
: Node<T>没有问题,编译没问题但是一旦运行就是停不下来的满屏数字。。