C++中如何在类模板外定义函数

#include<iostream>usingnamespacestd;template<classnumtype>classCompare{private:numtyp... #include<iostream>
using namespace std;
template<class numtype>
class Compare
{ private:
numtype x;
numtype y;
public:
Compare(numtype a,numtype b)
{
x=a;
y=b;
}
numtype max()
{
return (x>y)? x:y;
}
numtype min()
{
return (x<y)? x:y;
}
};
int main()
{
Compare<int>cmp1(3,7);
cout<<cmp1.max()<<endl;
cout<<cmp1.min()<<endl;
Compare<float>cmp2(23.12,43.55);
cout<<cmp2.max()<<endl;
cout<<cmp2.min()<<endl;
Compare<char>cmp3('a','d');
cout<<cmp3.max()<<endl;
cout<<cmp3.min()<<endl;
return 0;
}
展开
 我来答
国盗
2010-04-11 · TA获得超过565个赞
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:141万
展开全部
是想定义在源文件吗?
1.这是不允许的,因为模板类的成员函数的定义,是一种不完整的定义.
2.由于编译器不知道模板参数的具体类型,无法为其成员函数生成代码.
3.编译器在成员函数的调用处,才最终知道如何生成代码.
总之,模板类的成员函数的定义不能像普通类的成员函数一样,定义在源代码中,而只能定义在头文件中.

如果想定义在头文件中的模板类以外,倒是可以做到,如下:
template<class numtype>
Compare<numtype>::Compare(numtype a,numtype b){
x = a;
y = b;
}

template<class numtype>
numtype Compare<numtype>::max(){
return (x>y)? x:y;
}

template<class numtype>
numtype Compare<numtype>::min(){
return (x<y)? x:y;
}
匿名用户
2015-08-06
展开全部
  目前的大多数compiler还不能解析在类的声明之外定义的member template。
  C++ standard 对于在类定义之外定义member template 的标准写法如下(不过在VC++6.0下无法编译通过):
  template <class T> template <class T1>
  void A<T>::Test(T1 p)
  { }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
georangel
2010-04-11 · TA获得超过541个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:362万
展开全部
#include<iostream>
using namespace std;

template<class numtype>
class Compare
{
private:
numtype x;
numtype y;
public:
Compare(numtype,numtype);
numtype max();
numtype min();
};
// 在类模板外面定义其成员函数:
template<class numtype>
Compare<numtype>::Compare(numtype a,numtype b){
x = a;
y = b;
}

template<class numtype>
numtype Compare<numtype>::max(){
return (x>y)? x:y;
}

template<class numtype>
numtype Compare<numtype>::min(){
return (x<y)? x:y;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yw7
2010-04-10
知道答主
回答量:12
采纳率:0%
帮助的人:0
展开全部
同样的定义一个模板函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
落雨轰隆
2018-07-25
知道答主
回答量:5
采纳率:100%
帮助的人:3745
展开全部
类模板的成员函数的实现写在头文件(.h)的类内部或类外部都行,

但是,类模板成员函数在另一个文件(.cpp)里实现它报错
error LNK2019: 无法解析的外部符号 "public: void __thiscall Compare<float>::test(void)" (?test@?$Compare@M@@QAEXXZ),该符号在函数 _main 中被引用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式