“#define clear()”和“std :: wstring :: clear()”之间的混淆

时间:2013-08-09 07:03:58

标签: c++

我包含了“PDCurses / curses.h”,它定义了一个函数'clear()',然后当我使用'std :: wstring :: clear()'时,msvc-10.0编译器会报告错误。当我在包括之后'#undef clear()'时它被修复了。代码是这样的:

inline void str_clear( std::wstring& wstr ) 
{
    wstr.clear();
}

我使用'std ::'但为什么编译器仍然令人困惑? 可能是由多定义的“命名空间”引起的?

1 个答案:

答案 0 :(得分:8)

原因是预处理器基本上对所有定义的宏进行搜索和替换。并且它在编译器正确获取代码之前完成,并且它通常不了解名称空间,类或范围。

所以如果你有例如。

#define clear()  something

然后使用

wstr.clear();

预处理器将替换clear(),以便编译器看到

wstr.something;