Mik*_*kes 17 c++ windows macros collision
我有一些C++代码,其中包含一个名为CreateDirectory(). Previous的方法,以前代码只使用了STL和Boost,但最近我必须包括<windows.h>所以我可以查找CSIDL_LOCAL_APPDATA.
现在,这段代码:
filesystem.CreateDirectory(p->Pathname()); // Actually create it...
Run Code Online (Sandbox Code Playgroud)
不再编译:
error C2039: 'CreateDirectoryA' : is not a member of ...
Run Code Online (Sandbox Code Playgroud)
这对应于此宏winbase.h:
#ifdef UNICODE
#define CreateDirectory CreateDirectoryW
#else
#define CreateDirectory CreateDirectoryA
#endif // !UNICODE
Run Code Online (Sandbox Code Playgroud)
预处理器正在重新定义我的方法调用.有没有办法避免这种命名冲突?或者我必须重命名我的CreateDirectory()方法?
Joh*_*ler 14
如果你只是重命名你的CreateDirectory方法,你会更好.如果你需要使用Windows API,与Windows.h的战斗是一场失败的战斗.
很明显,如果你在包含windows.h时一致,那么仍然会编译.(虽然你可能在其他地方遇到问题).
qua*_*ana 10
您可以创建一个模块,其唯一目的是#include <windows.h>查找包含在函数中的CSIDL_LOCAL_APPDATA.
int get_CSIDL_LOCAL_APPDATA(void)
{
return CSIDL_LOCAL_APPDATA;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,为搞清楚发生的事情做得好!
| 归档时间: |
|
| 查看次数: |
5703 次 |
| 最近记录: |