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

作者:朱金灿

来源: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类型导致出现了编译错误。

参考文献:

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

原文地址:https://www.cnblogs.com/lanzhi/p/6469748.html