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