在两个第三方库中uint32的Typedef重新定义(C2371)

问题描述:

在我的应用程序中,我使用的是Box2DSpidermonkey。两个库都定义了uint32类型,在同一个编译单元中使用这两个库时,显然会给我一个编译器错误。在两个第三方库中uint32的Typedef重新定义(C2371)

b2settings.h(Box2D):typedef unsigned int uint32;

jsotypes.h(Spidermonkey):typedef unsigned long uint32;

有什么办法可以解决这个冲突而不需要更改第三方库的头文件?

我很感谢每一个提示!

+0

用命名空间包装#includes。 – 2010-12-11 16:48:49

+0

有没有其他方法可以解决这些问题? – SlideGauge 2011-06-07 13:49:28

你可以做到这一点的黑客:

#define uint32 Box2D_uint32 
#include "Box2D.h" 
#undef uint32 
#define uint32 Spider_uint32 
#include "Spidermonkey.h" 
#undef uint32 

由于typedef仅仅是一个别名,这不应该,只要引起ODR违反这些标题只包含声明。如果存在使用uint32的(结构或内联函数)定义,则其违反ODR。虽然你的编译器可能不够聪明来检测这个,它仍然会工作。

但是,更好的选择是向图书馆开发人员报告问题,以便他们通过例如命名空间。

+0

实际上一个uint32和其他任何东西非常相似:) – 2010-12-11 14:31:20