我包含了定义函数“clear()”的“PDCurses/curses.h”,然后当我使用“std::wstring::clear()”时,msvc-10.0 编译器报告错误。当我在包含后使用“#undef clear()”时它已修复。代码是这样的:
inline void str_clear( std::wstring& wstr )
{
wstr.clear();
}
我使用了“std::”,但为什么编译器仍然令人困惑? 可能是多定义的'namespace'引起的?
最佳答案
原因是因为预处理器基本上对所有定义的宏进行搜索和替换。而且它是在编译器正确获取代码之前完成的,并且它对命名空间、类或一般范围一无所知。
所以如果你有例如
#define clear() something
然后使用
wstr.clear();
预处理器将替换 clear()
以便编译器看到
wstr.something;
关于c++ - "#define clear()"和 "std::wstring::clear()"之间的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18141622/