2014-03-24 174 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如何工作。这次我只是一个脑筋急转弯= / –