2014-03-24 100 views
0

我正在做一個在學校中的任務,我們應該爲我們自己的List類創建一個構造函數,它將初始化列表作爲參數。初始化列表到構造函數

這就是我希望能夠做到:

List ourList {1, 2, 3}; 

這是我到目前爲止有:

List::List(std::initializer_list<int> il) 
{ 
    head_ = copy(il.begin(), il.end()); 
} 

List_Node* List::copy(std::initializer_list<int>::iterator begin, 
         std::initializer_list<int>::iterator end) 
{ 
    if(begin == end) 
    return nullptr; 

    List_Node* new_list = new List_Node(*begin); 

    List_Node* node = copy(begin++, end); 
    new_list->next_ = node; 
    return new_list; 
} 

在我的愚見,這應該工作的偉大。但是,當我嘗試初始化時(List list {1,2,3};),我得到一個seg-fault。有人能解釋我在這裏做錯了嗎?

+3

你保持了複製相同的元素,並且,你想'++ begin'不'開始++' –

+1

爲什麼要用復發順序任務?它只會讓這個bug更難以發現。 – luk32

回答

6
List_Node* node = copy(begin++, end); 

這將再次調用copy使用相同的參數,遞歸,永不完成。

您應該能夠通過使用調試器來查看它崩潰的位置,並且您會看到有數百個對List::copy的調用,而不是您預期的三個調用。

你想++beginbegin++

+1

我想你可以解釋'op ++'和'++ op'之間的區別,這樣OP就會變得更智能。這將是很好的IMO。 – luk32

+0

謝謝喬納森Wakely,這工作得很好! –

+0

@ luk32謝謝,但我知道op ++和++ op如何工作。這次我只是一個腦筋急轉彎= / –