C++模板有关问题,在一个头文件中声明了,如何在另一个文件定义呢?小弟我的会异常,小弟我是不是写错了

C++模板问题,在一个头文件中声明了,怎么在另一个文件定义呢?我的会错误,我是不是写错了。
如果在类内已经定义好函数就没事,在外边就错了,如果分开文件写应该更加不行吧?
C/C++ code


template <class UserType>
class Compare
{
public:
    UserType max(UserType na, UserType nb);
    UserType min(UserType na, UserType nb);
};

UserType Compare::max(UserType na, UserType nb)
{
    return (na > nb) ? na : nb;
}

UserType Compare::min(UserType na, UserType nb)
{
    return (na < nb) ? na : nb;
}




------解决方案--------------------
将模板声明放入类的成员函数的定义中,每个成员函数都需要完整的模板类型的声明...
改了一个,编译通过,运行正常
C/C++ code
#include <iostream>

using namespace std;

class Compare
{    
public:
    template <class UserType>
    UserType max(UserType na, UserType nb);
    template <class UserType>
    UserType min(UserType na, UserType nb);
};

template <class UserType>
UserType Compare::max(UserType na, UserType nb)
{
    return (na > nb) ? na : nb;
}

template <class UserType>
UserType Compare::min(UserType na, UserType nb)
{
    return (na < nb) ? na : nb;
}

int main()
{
    Compare a; 
    cout<<a.max(234,3) <<endl; 
    return 0;
}

------解决方案--------------------
你的定义出问题了,应该是
C/C++ code

template <class UserType>
UserType Compare<UserType>(::maxUserType na, UserType nb)
{
    return (na > nb) ? na : nb;
}

template <class UserType>
UserType Compare<UserType>((::minUserType na, UserType nb)
{
    return (na < nb) ? na : nb;
}

------解决方案--------------------
类内就不用template <class UserType>了吧
------解决方案--------------------
是编译器的事,我用的是vc2008,还有你的编译器可能将你写的min,max方法当作库函数重载了
将其换个方法名如:Min , Max.试试看看...
------解决方案--------------------
什么意思,OK?
看一本好点的书如:C++ primer,呵呵...
------解决方案--------------------
C/C++ code
#include <iostream>

using namespace std;
    template <class UserType>
class Compare
{    
public:
    UserType max(UserType na, UserType nb);
    
    UserType min(UserType na, UserType nb);
};

template <class UserType>
UserType Compare<UserType>::max(UserType na, UserType nb)
{
    return (na > nb) ? na : nb;
}

template <class UserType>
UserType Compare<UserType>::min(UserType na, UserType nb)
{
    return (na < nb) ? na : nb;
}

int main()
{
    Compare<int> a; 
    cout<<a.max(234,3) <<endl; 
    return 0;
}

------解决方案--------------------
vc 6学习c++真的很费劲...
------解决方案--------------------
8楼的说法对在这个问题上来说我觉得是多余的,
因为在对max和min函数的调用时是它所在的类的实例对象来调用的,
根本就不会和其他类中的函数会冲突
------解决方案--------------------
分开也上可以的
------解决方案--------------------
要注意类模板和函数模板的不同写法