如何从点赞列表中创建一个复制构造函数
How to make a copy constructor from a liked list
我有一个程序,我正在尝试制作一个复制构造函数,并在程序结束时显示我复制的内容。问题是它没有显示,而是给了我Segmentation fault (core dumped)
。我只想给出我制作复制构造函数的部分。如果你需要更多的代码,请告诉我。
main
#include "list.h"
int main()
{
list newlist(mylist);
newlist.displayList();
}
list.cpp
#include "list.h"
list::list()
{
head=NULL;
}
list::~list()//deconstructed
{
while (head != NULL)
{
deleteElement(head->item); //delete next element
}
}
list::list(const list&)//copy constructor
{
list L1;
list L2(L1);
}
list.h
class list
{
public:
list();
~list();
list(const list&);
private:
node *head;
};
您的复制构造函数没有复制任何内容,更糟糕的是,它陷入了递归循环。它需要看起来更像这样:
list::list(const list &src)//copy constructor
: head(NULL)
{
node *srcnode = src.head;
node *prev = NULL;
while (srcnode != NULL)
{
node *newnode = new node;
newnode->item = srcnode->item;
if (!head) head = newnode;
if (prev) prev->next = newnode;
prev = newnode;
srcnode = srcnode->next;
}
}
话虽如此,您确实应该使用std::list
类,而不是手动编写自己的链表。
复制构造函数中有几个错误。
在这里,您没有命名或使用应该复制的const list&
。
list::list(const list&)//copy constructor
在这里,您正在创建一个新的空列表。
list L1;
在这里,您试图在复制构造函数的定义中调用复制构造函数。
list L2(L1);
最终的结果是,复制构造函数创建了一个新的空列表,然后再次调用复制构造函数。试图永远重复。
相关文章:
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 如何处理没有默认构造函数但在另一个构造函数中构造的对象?
- 我用字符串做了一个C++构造函数,但它不会打印出字符串
- 有一个构造函数,但有两个析构函数
- C++ 如何根据作为输入传递的参数调用一个构造函数或另一个构造函数?
- C 如何仅实现多个继承类的一个构造函数
- 错误:在“(”标记之前进行预期的构造函数、析构函数或类型转换.即使我有一个构造函数
- 让构造函数在其初始化列表中调用同一类的另一个构造函数是否有效
- 创建一个构造函数,即Capabe获取任何数量的参数
- 我如何在类上需要另一个构造函数的对象中声明一个对象
- 使用委托调用构造函数和在另一个构造函数体中调用的区别
- 为什么当我尝试编译时,我的 c++ 代码不断返回对我的一个构造函数的"未定义的引用"?
- C :另一个构造函数的构造函数的隐式调用
- 如何创建一个构造函数,该构造函数吸收char阵列
- 为什么有一个构造函数同时接受initializer_list和一个参数包
- 我有一个构造函数,但我需要将输出返回到 main.cpp.我无法使用获取字符串功能!!任何想法如何实现这一目标?
- 如何在一个构造函数中使用两个可变参数模板参数来绑定两个函数
- 从同一类的另一个构造函数调用构造函数
- 将类的实例传递给另一个构造函数,该构造函数将其对象添加到所传递实例所拥有的列表中