我在为双向链表实现复制构造函数时遇到了麻烦。我的教授为DLL类提供了一个框架,我正在将这些函数作为项目的一部分来实现。我在网上看到的所有内容都没有被证明是有用的,因为我看到的一切看起来与我应该使用的代码格式完全不同。
对于初学者来说这是DLL.h文件
#include <string>
using namespace std;
struct Node{
string ssn;
string name;
Node* succ;
Node* pred;
};
class DLL{
private:
Node* headPtr;
int itemCount;
public:
DLL();
DLL(DLL& n); //Copy constructor
virtual ~DLL();
Node* getHeadPtr();
int search(string ss) const;
bool insert(string ss, string name, int & count);
bool remove(string ss, int & count);
int size();
void display();
};
除了析构函数之外我还实现了所有其他函数,我还没有使用过,但到目前为止这是我的复制构造函数的代码:
DLL::DLL(DLL& n){
n.headPtr = nullptr;
n.itemCount = 0;
Node* temp = headPtr;
while(temp!= NULL){
temp = temp->succ;
insert(temp->ssn, temp->name, n.itemCount);
}
}
当我运行这个时,我会继续得到段错误。我已经在互联网上搜索了一段时间,但是没有类似于我理解的格式了。
非常感谢所有帮助/建议/建议,谢谢!
编辑:所以现在我有了这个,它在技术上有效,但要求是内存地址不同。我提供了一个文件test.cpp,它运行带有示例参数的函数,最后运行就像是原始列表:12,13,14(带内存地址),然后是新复制的。
在我获得segfault 11之前,但现在它运行但是在相同的内存地址。
DLL::DLL(DLL& n){
Node* temp = n.headPtr;
headPtr = temp;
int count = 0;
while(temp != NULL){
insert(temp->ssn, temp->name, count);
temp = temp->succ;
}
}
答案 0 :(得分:0)
你在复制构造函数中做的第一件事是破坏原始列表。 n
是您从复制的列表,通常不应修改,这就是为什么通常复制构造函数将const Type&
作为输入参数。
你必须做类似
的事情DLL::DLL(DLL& n) {
int i = 0
Node* temp = n.headPtr;
while(temp != NULL){
temp = temp->succ;
insert(temp->ssn, temp->name, i++);
}
}