#include<iostream>
using namespace std;
template <typename T>
class AAA
{
private :
T num;
public:
AAA(T _num) : num(_num)
{}
const AAA& operator=(const AAA& ref);
};
template <typename T>
const AAA& AAA<T>::operator=(const AAA& ref)
{
cout<<"Hello World"<<endl;
return *this;
}
int main(void)
{
AAA<int> a1(3);
AAA<int> a2(5);
a1=a2;
return 0;
}
이렇게 작성하면 컴파일 에러가 뜸.
컴파일 에러를 해결하려면
템플릿 멤버함수의 선언과 정의를 합치던지
아니면
const AAA<T>& operator=(const AAA& ref);
const AAA&<T> AAA<T>::operator=(const AAA& ref)
선언과 정의의 리턴형에 이렇게 <T> 선언을 추가해줘야함
내가 궁금한건
왜 선언과 정의를 따로 분리시켰을 때 이렇게 컴파일 에러가 뜨는가?
그리고 선언과 정의 분리시 <T>선언을 해줘야 한다면 인자로 받는 const AAA& ref에도 똑같이 <T> 선언이 필요한게 아닌가?
'C++ > 공개글' 카테고리의 다른 글
리틀 에디안과 빅 에디안의 차이점 (0) | 2013.01.26 |
---|---|
클래스 템플릿에서 <<연산자를 오버로딩 할 때 (1) | 2013.01.26 |
멤버함수의 선언과 정의 분리 시 참고사항 (0) | 2013.01.26 |
static binding과 dynamic binding (0) | 2013.01.26 |
Polymorphism의 조건 (0) | 2013.01.26 |