我有一些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/

10-12 23:55