[질문] C++ template 에서 질문있습니다.
글쓴이: syan / 작성시간: 토, 2003/09/20 - 3:34오후
단순화 시킨 소스는 다음과 같습니다.
/* temp.h */ template <class T> class A { public : T a; friend class B<T>; void printA(); }; template <class T> class B { public : A<T> b; void printB(); void printFromA(A<T> & a); }; /* temp.cpp */ #include <iostream> #include "temp.h" template <class T> void A<T>::printA() { printf("printA\n"); } template <class T> void B<T>::printB() { printf("printB\n"); } template <class T> void B<T>::printFromA(A<T> & a) { a.printA(); } int main() { A<int> a; B<int> b; a.printA(); b.printB(); b.printFromA(a); return 0; }
대강 구조가 이런데요. 컴파일을 하면 다음과 같은 에러가 나는 데 해결방법을 모르겠습니다.
In file included from temp.cpp:2: temp.h:6: error: `B' is not a template temp.h:6: error: ISO C++ forbids declaration of `type name' with no type
클래스 정의를 서로 다른 파일에 해도 마찬가지이고, 파일 내에서 A클래스와 B클래스의 순서를 바꾸면 다른 에러가 나고요.
template을 사용할 때, 클래스 배치를 어떤 방법으로 해야하는 지 알려주시면 감사하겠습니다.
Forums:
temp.h 의 class A의 선언앞에[code:1]templa
temp.h 의 class A의 선언앞에
template <class T> B;
를 추가합니다.
class A 에서 class B를 참조하기 때문에 A의 선언이 나오기 전에
class B 의 선언이 있어야 합니다.
[quote="exsider"]temp.h 의 class A의 선언앞에
이렇게 간단한 거였다니... ^^;;
감사합니다!
DTSTTCPW
댓글 달기