我包含了“PDCurses / curses.h”,它定义了一个函数'clear()',然后当我使用'std :: wstring :: clear()'时,msvc-10.0编译器会报告错误。当我在包括之后'#undef clear()'时它被修复了。代码是这样的:
inline void str_clear( std::wstring& wstr )
{
wstr.clear();
}
我使用'std ::'但为什么编译器仍然令人困惑? 可能是由多定义的“命名空间”引起的?
答案 0 :(得分:8)
原因是预处理器基本上对所有定义的宏进行搜索和替换。并且它在编译器正确获取代码之前完成,并且它通常不了解名称空间,类或范围。
所以如果你有例如。
#define clear() something
然后使用
wstr.clear();
预处理器将替换clear()
,以便编译器看到
wstr.something;