2013-04-20 112 views
0

我正在寫我的節點和列表類,一切工作正常,除非包括析構函數,複製構造函數和列表類中的賦值運算符函數,我不知道什麼是錯的他們或我不想包括的東西。鏈接列表複製構造函數和賦值運算符

linklist::linklist() 
    :firstNode(NULL), 
    lastNode(NULL), 
    nodeCount(0) {} 

linklist::~linklist()// destructor 
{ 
    node* current = firstNode; 
    while(current != 0) { 
     node* temp = current->getNextNode(); 
     delete current; 
     current = temp; 
    } 
    firstNode = 0; 
} 

linklist::linklist(linklist &L)// copy constructor 
{ 
    firstNode = NULL; 
    nodeCount = 0; 
    node* temp = L.firstNode; 
    for(int i = 0; i < L.getNodeCount(); i++) 
    { 
     push_back(temp); 
     temp = temp->getNextNode(); 
    } 
} 

linklist& linklist::operator=(const linklist& L)// overloading assignemnt operator 
{ 
    linklist* LL; 
    node* temp = L.firstNode; 
    while(temp != NULL) { 
     LL->getLast(); 
     temp = temp -> getNextNode(); 
    } 
    return *LL; 
} 
+0

編譯錯誤? seg故障?行爲不正確?請澄清哪些不起作用,並在出現錯誤的地方包含代碼。 – yngccc 2013-04-20 04:19:04

+0

是的,這是一個編譯錯誤,並沒有任何顯示! – Mido 2013-04-20 05:15:09

回答

1

您的分配應該與您的拷貝構造函數類似。因爲他們都做幾乎相同的事情。

與你分配的區別應該是clear在開始複製rhs(另一個)之前它在列表(本身)中是什麼。

然後它應該返回一個對自身的引用。 return *this。因此,作業可以鏈接。

linklist& linklist::operator=(const linklist& L)// overloading assignemnt operator 
{ 
    // Check if self assignment 
    if (&L == this) 
     return *this; 

    // clear myself. 
    // copy other. 
    return *this; 
} 
+0

在開始時,您應該添加一個檢查以確保您沒有將相同的RHS分配給LHS(即'if(&L == this)然後返回* this;')。在引用的情況下,這可能是無意的。 – 2013-04-20 04:33:32

+0

@EdHeal謝謝修復。 – stardust 2013-04-20 04:35:38

+0

謝謝你們,我正在研究它,讓我們看看它將如何工作! – Mido 2013-04-20 05:13:06

0

您似乎有兩個問題。首先,析構函數刪除所有節點結構。原件銷燬後,使用複製構造函數複製的任何新鏈接列表都將具有不正確的數據。其次,如果使用複製構造函數複製節點結構,可能會更好。這很難不準確的信息說,但你的鏈接列表構造函數可能看起來是這樣的:

firstNode = NULL; 
nodeCount = 0; 
node* temp = L.firstNode; 
for(int i = 0; i < L.getNodeCount(); i++) 
{ 
    push_back(new node(*temp)); 
    temp = temp->getNextNode(); 
} 

這樣,新的鏈表都有自己的節點副本。

+0

謝謝你,我已經這樣做了,但仍然有什麼不對,還在努力尋找! – Mido 2013-04-20 06:22:45

相關問題