error C2998:不能是模板定义的错误解决

2016-12-28 10:11:17来源:作者:clever101的专栏人点击

第七城市

作者:朱金灿

来源: 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.0/vc/include/sys/stat.inl(56) : error C3861: “_fstat64i32”: 找不到标识符

1>d:/program files (x86)/microsoft visual studio 9.0/vc/include/sys/stat.inl(61) : error C2661: “_stat64i32::_stat64i32”: 没有重载函数接受 2 个参数

1>e:/src/thirdpartylib/gdal_1_10_1_vc9/include/cpl_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 类型导致出现了编译错误。

参考文献:

1. 模板使用中注意的问题template<class T>

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台