我有一些C++代码,其中包含一种称为CreateDirectory().
的方法,以前该代码仅使用STL和Boost,但最近我不得不包括<windows.h>
,以便可以查找CSIDL_LOCAL_APPDATA
。
现在,此代码:
filesystem.CreateDirectory(p->Pathname()); // Actually create it...
不再编译:
error C2039: 'CreateDirectoryA' : is not a member of ...
对应于
winbase.h
中的此宏:#ifdef UNICODE
#define CreateDirectory CreateDirectoryW
#else
#define CreateDirectory CreateDirectoryA
#endif // !UNICODE
预处理程序正在重新定义我的方法调用。有什么可能的方法来避免这种命名冲突?还是我必须重命名
CreateDirectory()
方法? 最佳答案
如果您只重命名CreateDirectory方法,将会更好。如果您需要使用Windows API,则与Windows.h的战斗是一场失败的战斗。
顺便说一句,如果您一致地包含windows.h,则仍将在编译中。 (尽管您可能在其他地方遇到了问题)。
关于c++ - 如何避免与Windows头文件中定义的宏发生名称冲突?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2321713/