2010-12-11 2 views
3

내 응용 프로그램에서 Box2DSpidermonkey을 사용하고 있습니다. 두 라이브러리 모두 uint32 유형을 정의하고 있습니다. 동일한 컴파일 단위에서 두 가지를 모두 사용할 때 컴파일러 오류가 발생합니다.두 개의 타사 라이브러리에서 uint32에 대한 typedef 재정의 (C2371)

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

jsotypes.h (스파이더 맨 키) : 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

실제로 하나의 uint32는 다른 어떤 것과도 매우 비슷합니다. :) –

관련 문제