作者:朱金灿
来源:http://blog.csdn.net/clever101
在一个非模板类中定义了一个模板函数,如下:
template<typename T> bool HDF5_ReadData(int32 dset,hsize_t* offset,hsize_t* count,hid_t space,hid_t memspace,hid_t memtype, long lWidth,double dfSrcX,double dfSrcXInc, size_t iSrcOffsetCst,size_t iBufOffset,void* pvBuffer, GDALDataType inDataType,GDALDataType outDataType,long lBuffSize);
在编译时出现一堆错误:
1>e:cskimagedataset.h(42) : error C2998: “bool HDF5_ReadData”: 不能是模板定义
1>d:program files (x86)microsoft visual studio 9.0vcincludesysstat.inl(56) : error C3861: “_fstat64i32”: 找不到标识符
1>d:program files (x86)microsoft visual studio 9.0vcincludesysstat.inl(61) : error C2661: “_stat64i32::_stat64i32”: 没有重载函数接受2 个参数
1>e:src hirdpartylibgdal_1_10_1_vc9includecpl_vsi.h(103) : error C2989: “stat”: 类模板已经声明为非类模板
这个函数的代码是我从别处拷贝过来的。开始我百思不得其解,后来上网查找资料,找到这样一句话:在template语句与函数模板定义语句之间不允许有别的语句,如
template<class T> int i; // 错误,不允许插入别的语句 T max(T x,T y)
我想是不是因为函数参数中已经插入了类型定义呢?我试着把函数的第一个参数从int32 dset改为int dset,结果是编译错误全部消失,我猜测原因在某个头文件中使用了
typedef int int32;
这等于在template语句与函数模板定义了int32类型导致出现了编译错误。
参考文献: