在我的申请中,我使用Box2D和Spidermonkey。两个库都定义了类型uint32,当在同一个编译单元中使用它们时,显然会给出编译器错误。
b2settings.h(Box2D):typedef unsigned int uint32;
jsotypes.h(Spidermonkey):typedef unsigned long uint32;
有没有办法解决这种冲突而无需更改第三方库的标题?
我感谢每一个提示!
答案 0 :(得分:3)
你可以这样做:
#define uint32 Box2D_uint32
#include "Box2D.h"
#undef uint32
#define uint32 Spider_uint32
#include "Spidermonkey.h"
#undef uint32
由于typedef
仅仅是别名,因此只要这些标头仅包含声明,就不会导致ODR违规。如果存在使用uint32的(结构或内联函数)定义,则将违反ODR。虽然你的编译器可能不够智能,无法检测到它,但它仍然有用。
但更好的选择是向图书馆开发人员报告问题,以便他们能够解决这个问题,例如:命名空间。