【发布时间】:2014-09-28 17:21:02
【问题描述】:
我在使用赋值运算符时遇到了问题,它不会创建新的 qeueu,而是新数组指向旧数组。因此,当我在新队列中删除时,旧队列中的值会发生变化。
首先,我可以看到我的复制构造函数由于某种未知原因没有在我的 main 中调用,问题可能与此有关。
我用来说明问题的一些主要代码:
aQueue.enqueue(10);
aQueue.enqueue(20);
Queue<int> cQueue = aQueue;
cout << "aQueue: "; aQueue.printQeueue(2, 0);
cout << "cQueue: "; cQueue.printQeueue(3, 0);
cQueue.dequeue();
cout << "aQueue: "; aQueue.printQeueue(4, 1);
cout << "cQueue: "; cQueue.printQeueue(5, 1);
system("pause 4");
这是问题开始的地方,如果我用 10 和 20 将 aQueue 排入队列,然后将 cQueue 分配给 aQueue,如果我打印 aQueue,结果为:10 20。之后,将 cQueue 出列并打印 aQueue,结果为:-179016023。如果我打印 cQueue,结果是:20,应该是。
以下是直接或间接使用的函数:
template <typename T>
T Queue<T>::dequeue(){
T temp = front();
Node *old = fronten;
fronten = fronten->next;
delete old;
return temp;
}
template <typename T>
Queue<T>::Queue(const T &rhs){
Node *tempfront = rhs.fronten;
while (tempfront.fronten!=rhs.back){
enqueue(tempfront);
tempfront = tempfront->next;
}
}
template <typename T>
void Queue<T>::enqueue(const T& item){
if (isEmpty()){
back = fronten = new Node(item);
}
else
back = back->next = new Node(item);
}
Node(const T &theElement, Node *n = nullptr): element(theElement), next(n) {};
【问题讨论】:
-
请粘贴完整的编译示例
-
您没有 Queue 的复制 ctor,您的模板
Queue ::Queue(const T &rhs) 是 Queue 存储的类型的构造函数 -
@0d0a 现在你失去了我,但听起来很有道理。那么我应该如何定义我的复制 ctor?
-
类内:Queue::Queue(const Queue &rhs){//...}
标签: c++ queue operator-overloading assignment-operator