C++ 책의 예제가 애러가 납니다. 도와주세요.

trymp의 이미지

#include  <iostream>
 
using namespace std;
 
 
template< typename T1, typename T2 >
class Test
{
    public:
        T1 Add( T1 a, T2 b )
        {
            cout << "일반 템플릿을 사용했습니다." << endl;
            return a;
        }
};
 
//T2를 float로 구체화한 Test의 부분 전문화 템플릿
template< typename T1 >
class Test
{
    public:
        T1 Add( T1 a, float b )
        {
            cout << "부분 전문화 템플릿을 사용했습니다." << endl;
            return a;
        }
};
 
int main(int ac, char *av[])
{
    Test test1;
    test1.Add( 2, 3 );
 
    Test test2;
    test2.Add( 2, 5.8f );
}

위에는 책의 예제인데요. 아래와 같은 컴파일 애러가 나는데,

왜 나는지 이유를 모르겠습니다.

c++ 잘 아시는 분들 조언을 부탁드립니다.

cc.cpp:8: error: previous declaration 'template class Test'
cc.cpp:20: error: used 2 template parameter(s) instead of 1
cc.cpp:20: error: redefinition of 'class Test'
cc.cpp:9: error: previous definition of 'class Test'
cc.cpp: In function 'int main(int, char**)':
cc.cpp:32: error: missing template arguments before 'test1'
cc.cpp:32: error: expected `;' before 'test1'
cc.cpp:33: error: 'test1' was not declared in this scope
cc.cpp:35: error: missing template arguments before 'test2'
cc.cpp:35: error: expected `;' before 'test2'
cc.cpp:36: error: 'test2' was not declared in this scope

익명 사용자의 이미지

#include  <iostream>
 
using namespace std;
 
 
template< typename T1, typename T2 >
class Test
{
    public:
        T1 Add( T1 a, T2 b )
        {
            cout << "일반 템플릿을 사용했습니다." << endl;
            return a;
        }
};
 
//T2를 float로 구체화한 Test의 부분 전문화 템플릿
template< typename T1 >
class Test<T1, float> //See here
{
    public:
        T1 Add( T1 a, float b )
        {
            cout << "부분 전문화 템플릿을 사용했습니다." << endl;
            return a;
        }
};
 
int main(int ac, char *av[])
{
    Test<int, int> test1; //See here
    test1.Add( 2, 3 );
 
    Test<int, float> test2; //See here
    test2.Add( 2, 5.8f );
}

//See here 라고 표시된 세 부분을 보세요.

kaeri17의 이미지

저게 책 예제가 맞나요? 사실이라면 다른 책을 보시는걸 추천합니다.