2013-12-22 4 views
0

필자는 모든 요소가 고유 한 힙 할당 내부 반복자 (즉, 외부 반복자가 해당 반복자를 가리킴)에 연결되어있는 펑키 연결된 목록 기반 데이터 구조를 만들고 있습니다. 아이디어는 요소가 제거 될 때 무효화되지 않는 반복자를 갖는 것이지만 대신 l.end()를 가리키고 있음을 알게됩니다.const 반복자에 shared_ptr을 사용할 수없는 이유는 무엇입니까?

어쨌든 나는 많은 오류가 발생합니다. 여기 컴파일되지 않는 클래스가 있지만 왜 그런지 이해하지 못합니다.

template<class T> 
class pointer_node { 
public: 
    pointer_node(const T& t) : 
      t(t), p_iter() { 
    } 
    pointer_node(T&& t) : 
      t(move(t)), p_iter() { 
    } 
private: 
    T t; 
    std::shared_ptr<const std::list<pointer_node<T>>::iterator> p_iter; 
}; 

내가 오류는 다음과 같습니다

../src/pointer_list.h:28:24 : 오류 : ISO C++이없는 유형 [-fpermissive] 와 '유형 이름'의 선언을 금지합니다. ./src/pointer_list.h:28:60 : 오류 : 템플릿 인수 1이 잘못되었습니다.

누군가이 오류를 설명 할 수 있습니까?

답변

2

typename 키워드가 필요합니다 : const typename std::list<pointer_node<T>>::iterator.

키워드가 없으면 컴파일러는 먼저 이 유형이 아닌 객체이며, const이 적용될 때 혼동을 일으킨다 고 가정합니다. 오류 메시지가 더 명확해질 수 있습니다.

2

유형은 명시 적 이름 동음이 필요로하는 따라 이름 (가 T에 의존하기 때문에)이 있습니다

std::shared_ptr<const typename std::list<pointer_node<T>>::iterator> p_iter; 
//     ^^^^^^^^ 
관련 문제