包含windows.h会导致与本地变量名冲突
including windows.h causes clashing with local variable name
我包括windows.h
在我的h文件之一(为了使用CaptureStackBackTrace
),在一个visual studio项目。起初我得到了一些编译器错误,因为在windows.h
中使用了最小/最大std方法和同名宏,但这似乎是由#define NOMINMAX
解决的,正如我在其他SO帖子中读到的。(我说"似乎"是因为我不能确定,直到我的整个项目再次建立)。
问题是一些局部变量名现在破坏了构建。线:
int grp1;
在类方法中,会导致以下错误:
error C2143: syntax error : missing ';' before 'constant'
而cpp文件编译ok,如果我改变变量名称为grp1_
。
当然,我可以只是改变变量名,但尽管如此,我有一种感觉,我做错了什么-我吗?或者这是一个已知的问题时,包括windows.h
?除了更改变量名之外,还有其他更优雅的解决方案吗?
dlg.h包含
#define grp1 0x0430
您可以通过定义WIN32_LEAN_AND_MEAN来排除它
在某种程度上,这是所有库头文件的问题。C和c++保留以_
开头的名称来实现(标准库)。其他图书馆则是自行其是。人们希望有一个namespace
,或者如果库必须在C中编译,某种命名约定,比如前缀,但Windows和Posix都没有这样做。(在早期,X的头文件包含一个#define String
,这给其他库带来了很多问题。)
windows.h
特别糟糕,因为大多数功能“其中实际上是宏,并且不服从作用域。
在dlgs.h:
中定义了grp1#define grp1 0x0430
和dlgs.h包含在windows.h中,因此冲突。
在#include <windows.h>
之后可以#undef grp1
。这不是最漂亮的站点,但如果您只包含一次windows.h,则可以将这些修复保存在一个地方。
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 在C/C++中将变量名定义为__00000001有什么好处吗
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- C++ - 声明中变量名后面的括号
- 局部变量名称冲突
- 如何使替换 c 函数的变量名成为错误?
- 是否可以创建没有变量名的变量
- fstream库,试图创建一个变量名为(c++)的文件
- 一个数组C++中的消息和变量名
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- C++类名冲突
- 如何解决两个不使用命名空间的第三方库之间的类名冲突?
- 数组的变量名和该数组的地址有什么区别?
- 如何将变量名设置为字符串?C++
- 类中具有相同变量名的多重继承
- 如何在从.txt文件中读取时不重复相同的变量名
- 在循环中使用相同的变量名可以吗
- C++保留符号作为C变量名
- 变量名为TYPE_BOOL(c++代码)与ios宏冲突
- 包含windows.h会导致与本地变量名冲突