我对教练要求我做的事情感到很困惑。他提供的我们程序的示例输出说: "发送q1作为参数来测试复制构造函数"
所以我不确定他在问什么。
我在这里创建了一个copyQueue函数:
template <class Type>
void queueType<Type>::copyQueue(/*const*/ queueType<Type>& otherQueue)
//I omitted the const qualifier as I kept getting error messages when it was included
{
if(otherQueue.queueFront=NULL) {
initializeQueue();
} else {
count = otherQueue.count;
maxQueueSize= otherQueue.maxQueueSize;
queueFront = otherQueue.queueFront;
queueRear = otherQueue.queueRear;
list= new Type[maxQueueSize];
assert(list!=NULL);
for(int i = queueFront; i<queueRear; i++)
list[i]= otherQueue.list[i];
}//end else
}//end function
一个将打印队列内容的函数:
template <class Type>
void queueType<Type>::debugArray() {
for(int current =queueFront; current<count; current++) {
cout<<"[" << current<<"] ,"<< list[current]<<" ";
}
cout<<"\n"<<endl;
} //end debugQueue
我是假设我应该在main.cpp中调用copyQueue:
#include <iostream>
#include "queueAsArray.h"
using namespace std;
int main() {
queueType<int> q1;
queueType<int> q2;
for(int i= 0; i<10; i++)
q1.addQueue(i);
q1.debugQueue();
q1.copyQueue(q1);
q1.debugQueue();
return 0;
}
当我这样做时,第二次拨打debugQueue
时没有任何反应。
我有示例输出,从中我假设我需要将q1作为参数发送到copyQueue
函数,然后再次调用debugQueue
以显示队列中仍有组件。< / p>
我有点迷茫,不知道为什么它不会第二次打印。有什么想法吗?这只是我工作的一小部分,所以如果您需要整个实现文件或完整的main.cpp文件,请告诉我。或者如果您需要示例输出示例,我也可以提供它。
由于
答案 0 :(得分:2)
我认为你的导师要你做的是测试复制构造函数。在你的主要你应该:
int main() {
queueType<int> q1;
queueType<int> q2;
for(int i= 0; i<10; i++)
q1.addQueue(i);
q1.debugQueue();
q2.copyQueue(q1); // q2 here
q2.debugQueue(); // q2 here
return 0;
}
然后两个debugQueue
调用应打印相同的数组,这证明队列q1
已正确复制到队列q2
。
您的代码在copyQueue
函数中也有错误:
if(otherQueue.queueFront = NULL)
应该是
if(otherQueue.queueFront == NULL)
带有双重等号。简单的=
只会删除otherQueue
(这可能是您的编译器抱怨const
)的原因。双==
测试相等性。如果你更正了这个,你可以添加const
(这是一个非常糟糕的想法,让一个带有非const参数的复制构造函数)。
答案 1 :(得分:1)
复制构造函数是一个非常具体的构造,而不仅仅是“复制对象”,正如另一个答案似乎暗示的那样。阅读this article以获得快速入门,然后再点击谷歌“复制构造函数”。
您可能还想阅读this snippet,了解为什么如果您有复制构造函数,您可能需要赋值运算符和虚拟析构函数。
您还应该阅读有关const正确性的this entire section以诊断您的常量错误。