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