我对我的老师要我做什么感到非常困惑。他提供的程序示例输出表明:
“发送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参数的复制构造函数是一个非常糟糕的主意)。

10-02 01:06