• 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>

  • 相关阅读:
    iframeUpload
    获取当前文件路径。
    ie6 overflow 失效
    ie8 vml不显示
    json转换
    nodejs for windows
    模块化管理组件(2012/05/09)
    模块化管理组件v0.1
    Firefox和IE之间7个JavaScript的差异
    c输入函数细节
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469748.html
Copyright © 2020-2023  润新知