多个头文件对boolean变量重复定义问题怎么解决?

fibbery 2009-09-13 07:58:19
使用Visual C++ 编写程序时,由于引用了一些第三方的头文件以及Windows的头文件,现在出现了一下关于boolean重复定义的错误。目前还不知道冲突的头文件在什么地方引用的。

1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcndr.h(147) : error C2632: “char”后面的“int”非法
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcndr.h(147) : warning C4091: “typedef ”: 没有声明变量时忽略“unsigned char”的左侧
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\wtypes.h(1075) : error C2371: “BOOLEAN”: 重定义;不同的基类型
1> c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h(770) : 参见“BOOLEAN”的声明

请问,这个问题怎么解决?现在一点思路都没有。
...全文
766 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小何 2011-09-24
头文件的包含有什么原则可以讨论下!
回复
hkung 2010-09-08
总是感觉修改系统的头文件不好
回复
wuguizhu 2010-05-20
[Quote=引用楼主 fibbery 的回复:]
使用Visual C++ 编写程序时,由于引用了一些第三方的头文件以及Windows的头文件,现在出现了一下关于boolean重复定义的错误。目前还不知道冲突的头文件在什么地方引用的。

1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcndr.h(147) : error C2632: “char”后……
[/Quote]

今天我在写程序的时候(用到了occi)也遇到了这个问题,在occi的oratypes.h中有对boolean的宏定义,
#ifndef boolean
# define boolean int
#endif
与rpcndr.h中的 typedef unsigned char boolean 有冲突;

所以,我就把对occi.h的引用放在了windows.h引用的后面
回复
wotur 2009-09-13
在出错的哪个.c文件中用
#ifdef BOOLEAN
#undef BOOLEAN
#define unsigned char BOOLEAN
#endif
这样应该也能解决这个问题!
回复
hoomey 2009-09-13
如果在第三方库中有定义的话,改下应该没问题
但是,总觉得这样做不妥
回复
arong1234 2009-09-13
boolean是用宏定义的,你无法非常有效的防止他们冲突。因此应该尽量避免使用了同样宏的头文件在同一个编译单元内部被包含
例如:如果你第三方的myheader.h中有个重定义,你应该自己先单独创建一个cpp,在那里把你需要myheader.h里的函数的所有逻辑都实现一遍(例如int foo()),而你自己的其他cpp不引用myheader.h,只引用其他系统常见h文件和你那个特别的cpp定义的函数
回复
fibbery 2009-09-13
[Quote=引用 3 楼 hoomey 的回复:]
如果有的头文件有
#ifndef BOOLEAN
#define unsigned char BOOLEAN
#endif
用2楼的方法可能有效
[/Quote]

头文件都是Windows的,不是我自己写的。
回复
hoomey 2009-09-13
如果有的头文件有
#ifndef BOOLEAN
#define unsigned char BOOLEAN
#endif
用2楼的方法可能有效
回复
fibbery 2009-09-13
[Quote=引用 1 楼 mstlq 的回复:]
更改一下头文件的包含顺序^_^?
[/Quote]

嗯,你说得对。更改了就好了。这种问题太恶心,能否彻底解决?
回复
mstlq 2009-09-13
更改一下头文件的包含顺序^_^?
回复
发动态
发帖子
C语言
创建于2007-09-28

6.2w+

社区成员

C语言相关问题讨论
申请成为版主
社区公告
暂无公告