2015-03-22 2 views
0

У меня есть программа, в которой я пытаюсь создать конструктор копирования и отобразить то, что я скопировал в конце программы. Проблема заключается не в том, чтобы показать, что это дает мне Segmentation fault (core dumped). Я просто собираюсь дать часть, где я создал конструктор копирования. Если вам нужно больше кода, пожалуйста, дайте мне знать.Как создать конструктор копии из любимого списка

главный

#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; 

}; 

ответ

0

Есть несколько ошибок в вашем копа y конструктор.

Здесь вы не указали или не использовали const list&, который должен быть скопирован.

list::list(const list&)//copy constructor 

Здесь вы создаете новый пустой список.

list L1; 

Здесь вы пытаетесь вызов конструктора копирования, в определении вашего конструктора копии.

list L2(L1); 

Конечный результат заключается в том, что ваш конструктор копирования создает новый пустой список, а затем снова вызывает конструктор копирования. Попытка повторить навсегда.

1

Ваш конструктор копирования не копирует ничего, и хуже того, что он застревает в рекурсивном цикле. Это должно выглядеть примерно так: вместо

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 класс вместо того, чтобы писать свой собственный связанный список вручную.

Смежные вопросы