第三方图书馆定义/重新定义冲突

时间:2013-03-07 08:07:09

标签: c++ c qt typedef c-preprocessor

我正在使用两个独立的库在Qt平台上工作。我面临的问题是他的两个库对int32_t有不同的声明。

第一个图书馆有:

#ifdef _WIN32
#if ULONG_MAX == 0xffffffff 
typedef long int32_t;
#else
typedef int int32_t;
#endif
#endif

第二个图书馆:

typedef signed __int32    int32_t;
typedef unsigned __int32  uint32_t;

我得到的错误是:

  

C:\ Program Files(x86)\ SiliconSoftware \ Runtime5.1 \ include \ msinttypes \ stdint.h:91:错误:C2371:'int32_t':redefinition;不同的基本类型   c:\ program files(x86)\ matlab \ r2008a \ extern \ include \ mclmcr.h:216:参见'int32_t'的声明

我尝试在stackoverflow上关注这篇文章:

Typedef redefinition (C2371) for uint32 in two 3rd-party libraries

我试图在我的代码中实现它:

#define int32_t VicTorv3_int32_t
#include"mclmcr.h"
#undef int32_t
#define int32_t Silicon_int32_t
#include "stdint.h"
#undef int32_t

我仍然得到同样的错误。请帮忙。

1 个答案:

答案 0 :(得分:2)

stdint.h也是一个系统包含文件。在define / undef解决方法之前包含它的机会很好。当您解决方法尝试再次包含该文件时,包含警卫会完成他们的工作。您可以使用以下方法检查情况: Displaying the #include hierarchy for a C++ file in Visual Studio

我建议将包含stdint.h的部分移动到文件的最顶部,然后再包含其他部分。

请注意,系统中包含文件stdint.h,其他版本会出现问题。