[질문] 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
댓글 달기