4

私のアプリケーションでは、Box2DSpidermonkeyを使用しています。どちらのライブラリもタイプ uint32 を定義しています。同じコンパイル ユニットで両方を使用すると、明らかにコンパイラ エラーが発生します。

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

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

サードパーティ ライブラリのヘッダーを変更せずに、この競合を解決する方法はありますか?

すべてのヒントに感謝します!

4

1 に答える 1

4

あなたはこのハックをすることができます:

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

は単なるエイリアスであるためtypedef、これらのヘッダーに宣言のみが含まれている限り、これによってODR違反が発生することはありません。uint32を使用する(構造体またはインライン関数)定義がある場合、それODRに違反します。あなたのコンパイラはおそらくこれを検出するのに十分賢くないでしょうが、それでも動作します。

ただし、ライブラリ開発者に問題を報告して、名前空間などで修正できるようにすることをお勧めします。

于 2010-12-11T13:45:03.853 に答える