我对我的老师要我做什么感到非常困惑。他提供的程序示例输出表明:
“发送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
以显示该队列中仍然有组件。我对它为什么不能第二次打印感到迷茫和困惑。有什么想法吗?这只是我的工作的一部分,因此如果您需要整个实现文件或完整的main.cpp文件,请告诉我。或者,如果您需要样本输出示例,我也可以提供。
谢谢
最佳答案
我认为您的老师希望您做的是测试复制构造函数。在主要方面,您应该具有:
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参数的复制构造函数是一个非常糟糕的主意)。