1

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

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

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

4

1 回答 1

8

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

所以如果你有例如

#define clear()  something

然后使用

wstr.clear();

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

wstr.something;
于 2013-08-09T07:09:01.227 回答