#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> 선언이 필요한게 아닌가?





Posted by huammmm1
,