0

我对我的导师要求我做什么感到非常困惑。他提供的我们程序的示例输出说:“发送 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 文件,请告诉我。或者,如果您需要示例输出示例,我也可以提供。

谢谢

4

2 回答 2

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调用应该打印相同的数组,这证明 queueq1被正确复制到 queueq2中。

您的代码在copyQueue函数内部也有错误:

if(otherQueue.queueFront = NULL)

应该

if(otherQueue.queueFront == NULL)

带有双重等号。一个简单的=只是擦除otherQueue(这可​​能是你的编译器抱怨的原因const)。平等的双重==测试。如果你更正了这个,你可以添加const后面(拥有一个带有非常量参数的复制构造函数是一个非常糟糕的主意)。

于 2012-10-20T18:35:25.713 回答
1

复制构造函数是一个非常具体的构造,而不仅仅是另一个答案似乎暗示的“复制对象”。阅读这篇文章以快速了解它,只需谷歌“复制构造函数”了解更多信息。

您可能还想阅读这个片段,了解为什么如果您有一个复制构造函数,您可能需要一个赋值运算符和一个虚拟析构函数。

您还应该阅读有关 const 正确性的整个部分,以诊断您的 const 错误。

于 2012-10-20T18:58:18.493 回答