2014-01-02 2 views
-2

를 사용하여 내가 템플릿 클래스를 사용하여 이중 LinkedList의 구축, 내가 만든 클래스는 private 필드 다음이전를 포함하는 공용 클래스 linkedListNode innter 포함되어 있습니다. 캡슐화 문제의 난 다음 노드를C++ - 유형 이름과 템플릿 오류

template <class T> 
MyLinkedList<T>::MyLinkedListNode* MyLinkedList<T>::MyLinkedListNode::getNext() 
{ 
    return this -> next; 
} 

를 반환하는 방법을 정의하고 싶어하지만 컴파일 오류입니다. 는 또한 유형 이름을 사용하는 tryed하고 또한 컴파일 오류

컴파일시 오류는 다음과 같습니다 'MyLinkedList :: MyLinkedListNode'이전

필요 '유형 이름을' 'MyLinkedList가'종속 범위

때문에

답변

2

, 대신 타입의 값이 될 수있는 기회가 :

3

컴파일러는 지시대로 : MyLinkedList :: MyLi '전에

필요'유형 이름을 ' nkedListNode '때문에'MyLinkedList은 'MyLinkedList<T>::MyLinkedListNode* 종속 이름은 (는 템플릿 인수 T에 따라 다름)이기 때문에이 typename 사용해야 종속 범위

입니다.

template <class T> 
typename MyLinkedList<T>::MyLinkedListNode* MyLinkedList<T>::MyLinkedListNode::getNext() 
{ 
    return this->next; 
} 

you can see으로 코드를 수정할 수 있습니다.

MyLinkedList<T>가 인스턴스화
template <class T> 
typename MyLinkedList<T>::MyLinkedListNode* MyLinkedList<T>::MyLinkedListNode::getNext() 
{ 
    return this -> next; 
} 
1

컴파일러는 당신에게 솔루션을 말한다. typename 키워드는 컴파일러가 타입임을 알 수 있도록해야합니다. 종속 이름의 경우 컴파일러는 아무런 가정을하지 않습니다. 프로그래머는 typenametemplate 키워드를 올바른 위치에 뿌려야합니다. 운좋게도 오류 메시지에 있습니다. 그것보다 쉽게 ​​얻을 수 없습니다.