错误 1214 error C2039: “_Type”: 不是“std::tr1::_Result_type2<__formal,_
我说要有光2011/02/10软件综合 IP:河北
位于文件 D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult     第 40 行





事情是这样的, 最近在做一个古老C++项目的升级,是VS2003上的项目,前几个工程做的基本上就是把以前不合规矩的代码一个个改的规矩些,属于苦力活的范畴,还算比较顺利,没想到到现在这个地方卡住杯具了,直觉上VC自己的文件应该是不可能有错的,Google上也没找出个所以然来,所以希望有遇到过此类问题的朋友出手相助




不求立竿见影,只希望能有些许线索和经验




代码比较庞大,打包后也有近百M,就不发上来了,有兴趣死磕的朋友可以私聊加下QQ,我把代码直接发给你
来自:计算机科学 / 软件综合
6
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
我说要有光 作者
13年11个月前 IP:未同步
281465
Re:错误 1214 error C2039: “_Type”: 不是“std::tr1::_Result_type2<__f
在VS2010中调用Winsock(winsock or winsock2)的bind函数时很有可能会出现一些莫名其妙的错误而导致编译失败,控制台输出的错误信息指向了库中的xxresult,和程序本身的设计似乎没有任何关联。
控制台片段:
1>c:\\program files\\microsoft visual studio 10.0\\vc\\include\\xxresult(28): error C2825: '_Fty': must be a class or namespace when followed by '::'
1> c:\\program files\\microsoft visual studio 10.0\\vc\\include\\xxresult(40) : see reference to class template instantiation 'std::tr1::_Result_type2<__formal,_Fty,_Arg0,_Arg1>' being compiled
1> with
1> [
1> __formal=false,
1> _Fty=__w64 unsigned int,
1> _Arg0=std::tr1::_Nil &,
1> _Arg1=std::tr1::_Nil &
1> ]
1> c:\\program files\\microsoft visual studio 10.0\\vc\\include\\xxresult(597) : see reference to class template instantiation 'std::tr1::_Result_of2<_Fty,_Farg0,_Farg1>' being compiled


实际上这是由于在VS2010中Winsock的 bind()与TR1(C++ Technical Report 1)的bind() 冲突导致的。在VS2010中微软将TR1中的bind()声明在名称空间 std 中,而Winsock的bind() 则声明在全域(global namespace),当在代码中使用“using namespace std ”这样的语句引入整个名称空间后,由于此时存在两个bind(),且TR1的bind()是一个模板在编译器重载解析时具有较高的优先级,直接调用bind()将导致了TR1对Winsock调用的覆盖,接下来在编译阶段的类型错误就不足为怪了。
解决的方法很简单,只要让编译器能够正确区别两者就可以了。为了解决由于使用"using namespace std"带来的冲突,我们需要在全域调用时显式的声明,如 “::bind()” ,这样编译器就只会在全域中解析该函数的调用,而不会导致冲突。以后遇到类似的情况,都可以通过全域声明(::call())来解决。


来自:XXXXXXXXXXXXXXXXXXXt/codeF/archive/2010/09/08/XXXXXXXXXXpx

问题解决,结贴
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
腾袭
13年11个月前 IP:未同步
281471
Re:错误 1214 error C2039: “_Type”: 不是“std::tr1::_Result_type2&amp;lt;__f
Thanks for reporting this issue. I've resolved it as By Design because the libraries are behaving correctly. Winsock's bind() is declared in the global namespace. <functional>'s bind() is declared in namespace std (I am skipping over some subtleties that are not relevant here). They coexist happily despite having the same name, because that's what namespaces are for.

However, when you say "using namespace std;", you make all of the names in namespace std available to unqualified name lookup. Therefore, both Winsock's bind() and <functional>'s bind() are considered during overload resolution, and because <functional>'s bind() is a template, it will usually win, but fail to compile later. That's why the compiler error here is so horrible.

To fix this, call ::bind() when you want Winsock's bind(), and std::bind() if you ever want <functional>'s bind(). When you call ::bind(), you're asking the compiler to look in the global namespace only.
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
腾袭
13年11个月前 IP:未同步
281473
Re:错误 1214 error C2039: “_Type”: 不是“std::tr1::_Result_type2&amp;lt;__f
微软的解释:

XXXXXXXXXXXXXXXXXXXXX/VisualStudio/feedback/details/500364/how-to-avoid-conflicts-between-tr1-bind-and-winsock-bind-function

[s:239][s:239][s:239]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
4king
13年11个月前 IP:未同步
281484
Re:错误 1214 error C2039: “_Type”: 不是“std::tr1::_Result_type2&amp;lt;__f
哇,我的权限也太低了吧= -
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
腾袭
13年11个月前 IP:未同步
281487
Re:Re:错误 1214 error C2039: “_Type”: 不是“std::tr1::_Result_type2&amp;lt;
引用第4楼4king于2011-02-11 21:42发表的 Re:错误 1214 error C2039: “_Type”: 不是“std::tr1::_Result_type2<__formal,_Fty,_Arg0,_Arg1&g .. :
哇,我的权限也太低了吧= -


我也是
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
wangcong0755
12年9个月前 IP:未同步
384516
Re:错误 1214 error C2039: “_Type”: 不是“std::tr1::_Result_type2&amp;lt;__f
真的非常感谢楼主,我今天下午遇到一个问题,原来编译的时候没有问题,后来又新添加了一个hpp和cpp文件后就各种报错,说是xxresult里面的28行和40行有错误,我以为是我新添加的文件的问题,看了楼主的帖子后试着把bind()改成::bind(),问题就迎刃而解了,否则的话我都不知道怎么解决了,十分感谢楼主
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
我说要有光
进士 学者 机友 笔友
文章
317
回复
5540
学术分
15
2008/03/06注册,9时48分前活动

Inspiration, Innovation, Discovery

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}