C++ 模板类定义与声明

声明和使用类模板: 如果在类模板外定义成员函数,应写成类模板形式:
template<class 虚拟类型参数>
函数类型 类模板名<虚拟类型参数>∷成员函数名(函数形参表列) {…}

测试的模板类,如下:
//Compare.h
#ifndef _COMPARE_H
#define _COMPARE_H

template <typename T>
class Compare
{
public:
 ~Compare(void);
 Compare(T,T);
 T max();
 T min();
private:
 T x;
 T y;
};
#endif

//Compare.cpp
#include "Compare.h"
template <typename T>
Compare<T>::Compare(T a,T b)
{
 x=a;
 y=b;
}
template <typename T>
Compare<T>::~Compare(void)
{
}
template <typename T>
T Compare<T>::max()
{
 return (x>y)?x:y;
}
template <typename T>
T Compare<T>::min()
{
 return (x<y)?x:y;
}
单单上面两个文件在,VS2008编译成功,然后加了下面的main函数就出现错误了。
#include <iostream>
using namespace std;
#include "Compare.h"
int main()
{
 Compare<int> tt(1,2);
              cout<<tt.max()<<endl;
 system("pause");
 getchar();
 return 0;
}
找了半天仍然找不着什么原因。提示错误:public: __thiscall Compare<int>::~Compare<int>(void)" (??1?

$Compare@H@@QAE@XZ)。
后来查资料,才知道现在的编译器均不支持,类模板定义与实现分享。
于是把Compare.cpp的内容剪切到了,Compare.h中,发现正常了。网上还有一种方法,说是用export加在template前,此方法在VS2008仍然无法通过。提示,该关键字export保留,可能以后会用到...

总结:在现阶段大部分的编译器,模板定义与模板声明得放一起方可编译成功

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值