两个第三方库中的uint32的typedef重定义(C2371)

时间:2010-12-11 13:29:13

标签: c++ typedef box2d spidermonkey

在我的申请中,我使用Box2DSpidermonkey。两个库都定义了类型uint32,当在同一个编译单元中使用它们时,显然会给出编译器错误。

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

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

有没有办法解决这种冲突而无需更改第三方库的标题?

我感谢每一个提示!

1 个答案:

答案 0 :(得分:3)

你可以这样做:

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

由于typedef仅仅是别名,因此只要这些标头仅包含声明,就不会导致ODR违规。如果存在使用uint32的(结构或内联函数)定义,则违反ODR。虽然你的编译器可能不够智能,无法检测到它,但它仍然有用。

但更好的选择是向图书馆开发人员报告问题,以便他们能够解决这个问题,例如:命名空间。