【问题标题】:Typedef redefinition (C2371) for uint32 in two 3rd-party libraries两个 3rd 方库中 uint32 的 Typedef 重新定义 (C2371)
【发布时间】:2011-05-23 22:46:01
【问题描述】:

在我的应用程序中,我使用的是Box2DSpidermonkey。这两个库都定义了 uint32 类型,当在同一个编译单元中同时使用这两个库时,这显然会给我一个编译器错误。

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

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

有没有什么方法可以解决这种冲突而不需要更改第 3 方库的标头?

感谢每一个提示!

【问题讨论】:

  • 用命名空间包装#includes。
  • 有没有其他方法可以解决此类问题?

标签: c++ typedef box2d spidermonkey


【解决方案1】:

你可以这样做:

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

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

但更好的选择是将问题报告给库开发人员,以便他们解决问题,例如命名空间。

【讨论】:

  • 在实践中,一个 uint32 与任何其他 uint32 非常相似:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 2016-05-03
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多