2012-12-10 9 views
0

내 프로그램의 문제점을 파악하는 데 문제가 있습니다. 헤더 파일에 클래스 선언과 멤버 함수 선언, 하나의 .cpp 파일에있는 멤버 함수 정의로 구성한 다음 main.cpp에 주 드라이버 프로그램이 있습니다.클래스 인스턴스화/템플릿 클래스 오류

http://ideone.com/PPZMuJ

ideone에 표시되는 오류가 실제로 구축 할 때 내 IDE가 표시하는 오류입니다 : 내가 여기에 프로그램을 게시 할 수 있도록 내가 ideone에 하나 개의 파일에 모두 넣었습니다. 누군가 내가 잘못하고있는 것을 지적 할 수 있습니까?

오류 :

prog.cpp: In instantiation of ‘IntDLLNode<int>’: 
prog.cpp:56: instantiated from ‘void IntDLList<T>::addToDLLHead(const T&) [with T = int]’ 
prog.cpp:215: instantiated from here 
prog.cpp:8: error: template argument required for ‘struct IntDLList’ 

Line 56: head = new IntDLLNode<T>(el,head,NULL); 
Line 215: dll.addToDLLHead(numero); 
Line 8: class IntDLLNode { 

당신은 시도/캐치 절을 무시할 수, 나는 아직 그 부분에서 작업을 완료하지 않은 - 난 그냥 현재의 에러 과거를 얻을 것을 시도하고있다.

+0

이 유 코드의 자세한 내용을 표시 할 수 있습니다 :

이 문제를 해결하려면, 친구 클래스 템플릿로 지정? 그것들은 다른 영역에있는 임의의 줄입니다 ... 정의와 그 주위의 일부 코드를 보려고합니다, 약간의 문맥 –

답변

0

문제는 친구의 선언에 : 여기

template <class T> 
class IntDLLNode { 
    friend class IntDLList; 
    // rest of IntDLLNode here 
}; 

당신은 친구가 아닌 템플릿 class IntDLList을 선언합니다. 나중에 템플릿 클래스를 같은 이름으로 선언합니다. 그러나 당신이 그것을 기대하지 않는다면 그것은 IntDLLNode의 친구가되지 않을 것입니다.

template <class U> class IntDLList; 

template <class T> 
class IntDLLNode    { 
    friend class IntDLList<T>; 
    // rest of IntDLLNode here 
}; 
+0

고마워요! 의도 한대로 작업. – user1890265