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