2010-12-11 7 views
3

私のアプリケーションでは、Box2DSpidermonkeyを使用しています。どちらのライブラリもuint32型を定義しています。これは、同じコンパイル単位で両方を使用すると明らかに私にコンパイラエラーを与えます。2つのサードパーティライブラリのuint32のtypedefの再定義(C2371)

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

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

サードパーティのライブラリのヘッダーを変更することなくこの衝突を解決する方法はありますか?

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

+0

#includesを名前空間で囲みます。 –

+0

このような問題を解決する他の方法はありますか? – SlideGauge

答えて

3

あなたはこのハックを行うことができます。これらのヘッダは宣言のみが含まれているとしてtypedef以来

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

は単なる別名で、これは限りODR違反が発生することはありません。 uint32を使用する(構造体またはインライン関数)定義がある場合、になり、ODRに違反します。コンパイラはこれを検出するほどスマートではないかもしれませんが、それでも動作します。

しかし、より良い選択は、問題をライブラリ開発者に報告することです。名前空間。

+0

実際には1つのuint32は他のどのようなものとも非常に似ています:) –

関連する問題