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,std::allocator,false>


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

开始以为是vector使用的自定义类型的问题。换成更简单的set试一下,依然如此。去掉静态声明后再试,还是这样。经过尝试发现,在定义该成员的类里的成员函数操作该成员就没问题,在其他类里直接操作该成员就报 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__

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


你可能感兴趣的:(C++)