包括windows.h导致与本地变量名冲突

Ita*_*atz 8 c++ windows visual-studio

我在Visual Studio项目windows.h中包含了我的一个h文件(为了使用CaptureStackBackTrace).起初我得到了一些编译器错误,因为使用了min/max std方法和同名的宏windows.h,但这似乎可以解决#define NOMINMAX,正如我在其他SO帖子中所读到的那样.(我说"似乎"因为我不能确定,直到我的整个项目再次建立好).

问题是一些局部变量名称现在破坏了构建.这条线:

int grp1;
Run Code Online (Sandbox Code Playgroud)

在类方法中,导致以下错误:

error C2143: syntax error : missing ';' before 'constant'
Run Code Online (Sandbox Code Playgroud)

如果我将变量名称更改为,则cpp文件编译正常grp1_.

当然我可以改变变量名,但是我感觉我做错了 - 是吗?或者这是包含在内的已知问题windows.h?除了更改变量名之外,还有其他更优雅的解决方案吗?

Hen*_*rik 10

dlg.h包含该行

#define grp1        0x0430
Run Code Online (Sandbox Code Playgroud)

您可以通过定义WIN32_LEAN_AND_MEAN来排除它.

  • 如果它在你计划分发的标题中,那么在用户需要`dlgs.h`的情况下避免命名冲突可能是个好主意.否则,你应该为你的所有项目添加`WIN32_LEAN_AND_MEAN`!节省一些编译时间,并摆脱一些像这样烦人的事情. (2认同)