|
#include <iostream>
using namespace std;
template <typename T> class C
{
private:
T data;
public:
class D //내포 클래스
{
private:
int data;
public:
D() : data(0) { }; //C<T>::D 생성자
};
C(const T & t) : data(t) { }; //C<T> 생성자
};
template <typename T> void f1(C<T> & c)
{
cout << "f1함수 호출!";
}
//컴파일러가 함수 정의를 받아들이지 못한다
template <typename T> void f2(C<T>::D & d)
{
cout << "f2함수 호출!";
}
int main()
{
C<int> c(10);
C<int>::D d;
f1(c);
f2(d); //에러
return 0;
}
위 소스에서
template <typename T> void f2(C<T>::D & d)
이부분 아무리 생각해도 맞는거 같은데 컴파일이 왜 안될까요?
main 에서 f2(d) 이부분에서 d 가 C<int>::D 이니까
f2 에서 T 가 int 로 대체되어야 하지 않나요?
컴파일러가 아예 정의를 인식 못하던데.. 고민입니다..
|