2014-03-24 6 views
0

초기화 목록을 인수로 사용하는 자체 List 클래스의 생성자를 만드는 학교에서 과제를 수행하고 있습니다.생성자에 대한 초기화 목록

이 내가 할 수 있기를 원하는 것입니다 :

내 소견에서
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 ourList {1, 2, 3}; 

이것은 내가 지금까지 가지고있는 것입니다. 그러나, 내 초기화 (List list {1,2,3};)를 시도하면 seg-fault가 발생합니다. 누군가 내가 여기서 잘못하고 있다고 설명해 주시겠습니까?

+3

당신은 이상 같은 요소를 복사 유지하고 이상, 당신은'++ begin''++ 시작하지 싶지는' –

+1

왜 순차적 인 작업 재발을 사용하지 ++begin을 원하는

? 버그를 찾기가 더 어려워집니다. – luk32

답변

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

이 영원히 재귀 결코 완료, 같은 인수를 다시 copy를 호출합니다.

디버거를 사용하여 충돌이 발생한 위치를 알 수 있어야하고, 세 번의 호출이 아닌 List::copy에 수백 건의 호출이 있었을 것입니다. 당신은 begin++

+1

op가 ++보다 더 똑똑해 지도록 OP ++와 OP ++의 차이점을 설명 할 수 있다고 생각합니다. 그것은 좋은 IMO가 될 것입니다. – luk32

+0

고마워요 조나단 Wakely, 그 일이 잘 됐어! –

+0

@ luk32 감사합니다.하지만 op ++와 ++ op가 어떻게 작동하는지 알고 있습니다. 이번엔 내게 뇌물 만 = / –

관련 문제