在两个第三方库中uint32的Typedef重新定义(C2371)
问题描述:
在我的应用程序中,我使用的是Box2D和Spidermonkey。两个库都定义了uint32类型,在同一个编译单元中使用这两个库时,显然会给我一个编译器错误。在两个第三方库中uint32的Typedef重新定义(C2371)
b2settings.h(Box2D):typedef unsigned int uint32;
jsotypes.h(Spidermonkey):typedef unsigned long uint32;
有什么办法可以解决这个冲突而不需要更改第三方库的头文件?
我很感谢每一个提示!
答
你可以做到这一点的黑客:
#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
用命名空间包装#includes。 – 2010-12-11 16:48:49
有没有其他方法可以解决这些问题? – SlideGauge 2011-06-07 13:49:28