C++ 在两个第三方库中为uint32重新定义类型定义(C2371)
在我的应用程序中,我使用和。这两个库都定义了uint32类型,当在同一个编译单元中使用这两个库时,这显然给了我一个编译器错误 b2settings.h(Box2D):typedef unsigned int uint32 h(Spidermonkey):typedef无符号长uint32 是否有任何方法可以解决此冲突,而无需更改第三方库的标题 我感谢每一个提示 您可以执行以下操作:C++ 在两个第三方库中为uint32重新定义类型定义(C2371),c++,typedef,box2d,spidermonkey,C++,Typedef,Box2d,Spidermonkey,在我的应用程序中,我使用和。这两个库都定义了uint32类型,当在同一个编译单元中使用这两个库时,这显然给了我一个编译器错误 b2settings.h(Box2D):typedef unsigned int uint32 h(Spidermonkey):typedef无符号长uint32 是否有任何方法可以解决此冲突,而无需更改第三方库的标题 我感谢每一个提示 您可以执行以下操作: #define uint32 Box2D_uint32 #include "Box2D.h" #undef uin
#define uint32 Box2D_uint32
#include "Box2D.h"
#undef uint32
#define uint32 Spider_uint32
#include "Spidermonkey.h"
#undef uint32
由于typedef
只是一个别名,只要这些头文件只包含声明,就不应该导致ODR冲突。如果存在使用uint32的(结构或内联函数)定义,它将违反ODR。虽然您的编译器可能不够聪明,无法检测到这一点,但它仍然可以工作
但更好的选择是向库开发人员报告问题,以便他们使用名称空间等解决问题。实际上,一个uint32与其他uint32非常相似:)将#includes用名称空间包装。还有其他方法解决此类问题吗?