error C2061: 语法错误: 标识符“_Wherenode”

昨天同事说,类里加了个静态的vector类型的公共成员后,在其他类里调用,操作该成员,编译出错。

1>d:\program files\microsoft visual studio 9.0\vc\include\xtree(1411) : error C2061: 语法错误: 标识符“_Wherenode”
1>        d:\program files\microsoft visual studio 9.0\vc\include\xtree(1408): 编译类模板成员函数“std::_Tree_nod<_Traits>::_Node *std::_Tree<_Traits>::_Buynode(std::_Tree_nod<_Traits>::_Node *,std::_Tree_nod<_Traits>::_Node *,std::_Tree_nod<_Traits>::_Node *,const IgnoreCaseWString &,char)”时
1>        with
1>        [
1>            _Traits=std::_Tset_traits<IgnoreCaseWString,std::less<IgnoreCaseWString>,std::allocator<IgnoreCaseWString>,false>


我的第一感觉就是:不可能吧!转过去看了看。

开始以为是vector使用的自定义类型的问题。换成更简单的set<int>试一下,依然如此。去掉静态声明后再试,还是这样。经过尝试发现,在定义该成员的类里的成员函数操作该成员就没问题,在其他类里直接操作该成员就报 xtree(1411) : error C2061: 语法错误: 标识符“_Wherenode”

看了xtree的对应代码,_Wherenode分明是在前2行声明且赋值的一个指针。当时想来想去也想不出啥原因。

今天CSDN再搜了一下,找到一个说法,是MFC的DEBUG_NEW导致的。

 参见: http://blog.csdn.net/gzlyb/article/details/3028471

我验证了一下,果然如此。

原来 afx.h中定义了 #define DEBUG_NEW new(THIS_FILE, __LINE__) 和 #define THIS_FILE          __FILE__

<stree>被包含的位置在DEBUG_NEW 之后,自然就不认识THIS_FILE了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值