我试图以平台无关的方式输入defde DWORD,我遇到了以下编译错误:
...\mingw.org\mingw_gcc_4.5.0\bin\../lib/gcc/mingw32/4.5.0/../../
../../include/windef.h:229:23: error:
'DWORD' has a previous declaration as 'typedef long unsigned int DWORD'
我希望能够依赖我的DWORD实现而不是基础编译器知道它是什么(使用typedef,而不是宏)。
为什么mingw(gcc 4.5.0)在编译应用程序时会自动包含“windef.h”?
如何阻止这种包含?
答案 0 :(得分:4)
解决了它,
它包含在windows.h中,由boost头文件包含。
我定义这些typedef的头文件只是查找“_WINDEF_H”的存在 - 并且有一个规则,它必须是最后包含的头文件(为了给windows头文件包含足够的时间,从而否定了需要我的typedef)。
答案 1 :(得分:4)
我的MinGW似乎没有自动拉入windef.h
。我怀疑你的程序包含了一些间接拉入它的其他标题。你能发布一个显示问题的短程序吗?
请注意,我看到您正在使用是否定义了_WINDEF_H
来确定这些内容是否已经被typedef。这可能在使用MinGW时有效,但实际的Windows SDK在包含_WINDEF_
时定义windef.h
- 至少一个特定版本。我想这是相当稳定的,但这肯定有可能在某些时候发生了变化。
最好键入宏MAKEWORD
之类的内容来检测是否已包含windef.h
- MAKEWORD
被记录为windef.h
中定义的宏,因此它应该在SDK版本中保持稳定,无论是否来自Microsoft。