在Visual-Studio项目中,我在其中一个h文件中包含了windows.h
(为了使用CaptureStackBackTrace
)。 起初,我得到了一些编译器错误,因为在windows.h
使用了min / max std方法和同名的macros,但是这似乎是通过#define NOMINMAX
来解决的,正如我在其他SOpost中所看到的。 (我说“似乎”,因为我不能确定,直到我的整个项目再次确定)。
问题是一些局部variables名称现在打破了构build。 该行:
int grp1;
在类方法中,导致以下错误:
error C2143: syntax error : missing ';' before 'constant'
而cpp文件编译好,如果我改变variables名称grp1_
。
当然,我可以改变variables名,但是我有一种感觉,我做错了什么 – 是吗? 或者,这是一个包括windows.h
的已知问题? 除了更改variables名称之外,还有其他更优雅的解决scheme吗?
dlg.h包含该行
#define grp1 0x0430
你可以通过定义WIN32_LEAN_AND_MEAN来排除它。
这在一定程度上是所有库标题的问题。 C和C ++保留名称,以_
开头(标准库的实现)。 其他图书馆是自己的。 人们希望namespace
,或者如果库必须在C编译,某种命名约定,如前缀,但既不Windows或Posix甚至这样做。 (在早期,X的头文件包含一个#define String
,这不会引起其他库的问题)。
最后,没有什么好的解决办法。 你只需要等到你碰到它,然后改变你的函数的名字。 ( windows.h
特别糟糕,因为其中的大部分“函数”实际上是宏,并且不服从范围。)
那么,grp1在dlgs.h中是这样定义的:
#define grp1 0x0430
和dlgs.h包含在windows.h中,因此冲突。
你可以在#include <windows.h>
之后#undef grp1
。 不是最漂亮的网站,但是如果只包含一次windows.h,可以将这些修补程序保留在一个地方。