我只是对我的程序有一个快速的问题。我的复制构造函数有问题。该程序停止工作,我已将问题发现到我的复制构造函数。似乎我做的while while循环并没有像它应该的那样结束。我确定我犯了一些错误,但我不能为我的生活想想它是什么。
,当我的后方为NULL时,循环应该结束。但是当这种情况发生时,它会崩溃我的程序。我的头文件。
#ifndef CONGERA3_H
#define CONGERA3_H
const int MAX_STRING = 6;
typedef char Element300[MAX_STRING + 1];
class Queue300
{
public:
Queue300 ();
Queue300 (Queue300 &old);
~Queue300();
void enQueue300 (const Element300);
void deQueue300 (Element300);
void view300();
private:
struct Node300;
typedef Node300 * NodePtr300;
struct Node300
{
Element300 element;
NodePtr300 next;
};
NodePtr300 front, rear;
};
#endif
我的实施档案。我刚刚包含了复制构造函数和enQueue和deQueue,因为其他一切都运行正常。我也留在常规构造函数中,以防出现问题。
#include <iostream>
#include <cstring>
#include "congera3.h"
using namespace std;
Queue300::Queue300 ()
{
rear = NULL;
front = rear;
return;
}
Queue300::Queue300 (Queue300 &old)
{
//Node300 * newNode;
//newNode = new Node300;
Element300 temp;
do
{
old.deQueue300(temp);
//cout << temp;
enQueue300(temp);
}while (old.rear ->element != NULL);
return;
}
void Queue300::enQueue300 (const Element300 element)
{
Queue300 temp;
Node300 * newNode;
newNode = new Node300;
strcpy (newNode -> element, element);
newNode -> next = rear;
rear = newNode;
if (newNode -> next == NULL)
{
front = newNode;
}
cout << newNode -> element;
}
void Queue300::deQueue300 (Element300 element)
{
Node300 * newNode;
newNode = new Node300;
newNode = rear;
int i = 0;
if (rear -> next == NULL)
{
strcpy (element, newNode -> element);
rear = NULL;
}
else
{
while (newNode -> next != NULL)
{
newNode = newNode -> next;
i = i + 1;
}
strcpy(element, newNode -> element);
newNode = rear;
for (int j = 0; j < i - 1; j++)
{
newNode = newNode -> next;
}
newNode -> next = NULL;
}
}