首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-05 
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函数的调用时是它所在的类的实例对象来调用的,
根本就不会和其他类中的函数会冲突
[解决办法]
分开也上可以的
[解决办法]
要注意类模板和函数模板的不同写法

热点排行