error C2825: '_Iter': 当后面跟“::”时必须为类或命名空间 -- 原因可能是参数错误或者自定义函数名和库函数名冲突

今天运行程序的时候遇到了下面这个bug

1>  B1020.cpp
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(371): error C2825: ‘_Iter‘: 当后面跟“::”时必须为类或命名空间
1>          e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(584): 参见对正在编译的类 模板 实例化“std::iterator_traits<_InIt>”的引用
1>          with
1>          [
1>              _InIt=int
1>          ]
1>          e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\algorithm(3155): 参见对正在编译的函数 模板 实例化“void std::_Debug_range<_RanIt>(_InIt,_InIt,std::_Dbfile_t,std::_Dbline_t)”的引用
1>          with
1>          [
1>              _RanIt=int
1>  ,            _InIt=int
1>          ]
1>          e:\c++\common\algorithmnote\algorithmnote\b1020.cpp(48): 参见对正在编译的函数 模板 实例化“void std::sort<int,bool(__cdecl *)(mooncake,mooncake)>(_RanIt,_RanIt,_Pr)”的引用
1>          with
1>          [
1>              _RanIt=int
1>  ,            _Pr=bool (__cdecl *)(mooncake,mooncake)
1>          ]
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(371): error C2039: “iterator_category”: 不是“`global namespace‘”的成员
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(371): error C2146: 语法错误: 缺少“;”(在标识符“iterator_category”的前面)
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(371): error C2602: “std::iterator_traits<_InIt>::iterator_category”不是“std::iterator_traits<_InIt>”基类的成员
1>          with
1>          [
1>              _InIt=int
1>          ]
1>          e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(371) : 参见“std::iterator_traits<_InIt>::iterator_category”的声明
1>          with
1>          [
1>              _InIt=int
1>          ]
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(371): error C2868: “std::iterator_traits<_InIt>::iterator_category”: 非法的 using 声明语法;应输入限定名
1>          with
1>          [
1>              _InIt=int
1>          ]
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(372): error C2825: ‘_Iter‘: 当后面跟“::”时必须为类或命名空间
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(372): error C2039: “value_type”: 不是“`global namespace‘”的成员
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(372): error C2146: 语法错误: 缺少“;”(在标识符“value_type”的前面)
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(372): error C2602: “std::iterator_traits<_InIt>::value_type”不是“std::iterator_traits<_InIt>”基类的成员
1>          with
1>          [
1>              _InIt=int
1>          ]
1>          e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(372) : 参见“std::iterator_traits<_InIt>::value_type”的声明
1>          with
1>          [
1>              _InIt=int
1>          ]
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(372): error C2868: “std::iterator_traits<_InIt>::value_type”: 非法的 using 声明语法;应输入限定名
1>          with
1>          [
1>              _InIt=int
1>          ]
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(373): error C2825: ‘_Iter‘: 当后面跟“::”时必须为类或命名空间
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(373): error C2039: “difference_type”: 不是“`global namespace‘”的成员
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(373): error C2146: 语法错误: 缺少“;”(在标识符“difference_type”的前面)
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(373): error C2602: “std::iterator_traits<_InIt>::difference_type”不是“std::iterator_traits<_InIt>”基类的成员
1>          with
1>          [
1>              _InIt=int
1>          ]
1>          e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(373) : 参见“std::iterator_traits<_InIt>::difference_type”的声明
1>          with
1>          [
1>              _InIt=int
1>          ]
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(373): error C2868: “std::iterator_traits<_InIt>::difference_type”: 非法的 using 声明语法;应输入限定名
1>          with
1>          [
1>              _InIt=int
1>          ]
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(375): error C2825: ‘_Iter‘: 当后面跟“::”时必须为类或命名空间
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(375): error C2039: “pointer”: 不是“`global namespace‘”的成员
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(375): error C2146: 语法错误: 缺少“;”(在标识符“pointer”的前面)
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(375): error C2602: “std::iterator_traits<_InIt>::pointer”不是“std::iterator_traits<_InIt>”基类的成员
1>          with
1>          [
1>              _InIt=int
1>          ]
1>          e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(375) : 参见“std::iterator_traits<_InIt>::pointer”的声明
1>          with
1>          [
1>              _InIt=int
1>          ]
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(375): error C2868: “std::iterator_traits<_InIt>::pointer”: 非法的 using 声明语法;应输入限定名
1>          with
1>          [
1>              _InIt=int
1>          ]
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(376): error C2825: ‘_Iter‘: 当后面跟“::”时必须为类或命名空间
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(376): error C2039: “reference”: 不是“`global namespace‘”的成员
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(376): error C2146: 语法错误: 缺少“;”(在标识符“reference”的前面)
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(376): error C2602: “std::iterator_traits<_InIt>::reference”不是“std::iterator_traits<_InIt>”基类的成员
1>          with
1>          [
1>              _InIt=int
1>          ]
1>          e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(376) : 参见“std::iterator_traits<_InIt>::reference”的声明
1>          with
1>          [
1>              _InIt=int
1>          ]
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(376): error C2868: “std::iterator_traits<_InIt>::reference”: 非法的 using 声明语法;应输入限定名
1>          with
1>          [
1>              _InIt=int
1>          ]
1>e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(584): error C2665: “std::_Debug_range2”: 2 个重载中没有一个可以转换所有参数类型
1>          e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(567): 可能是“void std::_Debug_range2<_InIt>(_RanIt,_RanIt,std::_Dbfile_t,std::_Dbline_t,std::random_access_iterator_tag)”
1>          with
1>          [
1>              _InIt=int
1>  ,            _RanIt=int
1>          ]
1>          e:\vs2013\vs2013_rtm_ult_chs\data\vc\include\xutility(559): 或       “void std::_Debug_range2<_InIt>(_InIt,_InIt,std::_Dbfile_t,std::_Dbline_t,std::input_iterator_tag)”
1>          with
1>          [
1>              _InIt=int
1>          ]
1>          尝试匹配参数列表“(int, int, std::_Dbfile_t, std::_Dbline_t, int)”时

  首先看到这么多的错误信息就头大,看都不想看,所以我没仔细看这些错误信息,就直接把错误信息的第一行复制到浏览器中去找解决办法,找了挺久时间,确实看到了类似的错误信息,但是跟我也不完全一样,最后看到网上说出现这种情况的原因可能是参数错误或者自定义函数名和库函数名冲突,函数名冲突这个可以排除,因为我确保函数名没有冲突,所以就定位在了参数错误,最后发现 sort 函数的前两个参数必须是迭代器或指针,但是我写了两个整型,所以报错。

  出错的位置

1 // 排序
2 // sort(cakes, cakes + N, cmp);        // 正确写法
3 // sort(0, N, cmp);                    // 错误写法

  查到的sort函数声明

template <class RandomAccessIterator, class Compare>
  void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

  总结:回过头来仔细看看错误信息,发现确实有一点可以看懂的提示,就是我标红的那段,所有提示中出现的函数名中只有这个sort函数名是我见过的,说明其他的都是库函数,说明错误一定是这个sort函数的调用错误,而且貌似标红的错误信息中还提示了参数不匹配的信息,但是由于对冗长错误信息的恐惧感,促使我一开始选择跳过这些错误提示,如果早一点看到这个信息,可以省很多时间,所以告诉自己以后如果再碰到这种又臭又长又看不懂的错误信息时,第一时间不要跳过这些提示,应该从中找到自己认识的部分,很可能错误就出在那里。

error C2825: '_Iter': 当后面跟“::”时必须为类或命名空间 -- 原因可能是参数错误或者自定义函数名和库函数名冲突

原文地址:https://www.cnblogs.com/hi3254014978/p/12208613.html

时间: 2024-11-05 21:50:20

error C2825: '_Iter': 当后面跟“::”时必须为类或命名空间 -- 原因可能是参数错误或者自定义函数名和库函数名冲突的相关文章

Spring-test使用JUnit时,测试类autowired报错,create bean error

Spring-test使用JUnit时,测试类里面使用autowired会报错, 报create bean error...... 但是controller里面@autowired可以正常运行的. 在网上提问,确认我一定是在扫描包上出现了问题.但是controller里面明明是可以得啊. 等等,我是使用maven构建的项目,项目分成了main.test两个部分.配置文件都在main文件夹下,那么扫到的包相应的都是mian文件夹下的包,而测试类所在的包扫描不到也就理所当然了. 解决方案:暂时先给t

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失 败,原因是出现以下错误:80040154

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失 败,原因是出现以下错误: 80040154 折腾了N个小时的问题,最终是通过这个ID去搜索未报错的机器的注册表,导出,再导入到报错的机器上,问题得到解决.原来是开发文档提示注册的ocx有误. 其他:只有服务器上安装了office序列才可以调用office的东西 其他问题相关: http://zhidao.baidu.com/question/532301026.htm

全局变量名、局部变量名和形参名冲突时,覆盖情况

以前错误的认为,全局变量名.局部变量名和形参名相同时,全局变量(也就是外部变量)被形参覆盖,形参被局部变量覆盖. 今天发现这样理解并不对.比如 function foo(num){ var num; console.log(num); } foo(1) // 1 //如果错误的理解为局部变量会覆盖形参的话,会认为会输出undefined 那事实是什么呢.实际上变量名冲突分两种,一种是函数外的变量和函数里的局部变量的冲突,一种是函数内部的冲突. 第一种冲突,我把它理解为是作用域链的上游(最上游是全

保存项目文件“XXX.csprj”时出错。类没有注册。

[出错提示]保存项目文件“XXX”时出错.类没有注册.正在查找具有CLSID的对象:{D9B3211D-E57F-4426-AAEF-30A806ADD397}. [解决办法] 需要安装:MSXML_6.0.3987

启动hbase时,hregionserver没有启动的原因

今天配置hbase的时候发现有几台机器的regionserver启不来.报错如下: at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAcc

Objective-C Runtime 运行时之一:类与对象

Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时能够更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等. 这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码.对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以正常的运行.这个运行时系统即Objc Runtime.Objc Runtime其实是一个Runti

[ObjectC]Runtime 运行时之一:类与对象

Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等. 这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码.对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以正常的运行.这个运行时系统即Objc Runtime.Objc Runtime其实是一个Runtime

Runtime 运行时之一:类与对象

Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时能够更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等. 这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码.对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以正常的运行.这个运行时系统即Objc Runtime.Objc Runtime其实是一个Runti

检索 COM 类工厂中 CLSID 为 {5374EC4C-1AA2-4829-A811-DE624ECEC23F} 的组件时失败,原因是出现以下错误: 80040154。

1.开发环境: win7 64位,vs2008,AE9.3 控制台程序 new方法失效报出的错误. 2.出现问题: 检索 COM 类工厂中 CLSID 为 {5374EC4C-1AA2-4829-A811-DE624ECEC23F} 的组件时失败,原因是出现以下错误: 80040154. 3.解决方案:将工程的属性中生成选项的目标平台设置为x86就可以了.