3

私は 2 つの別々のライブラリを使用して Qt プラットフォームに取り組んでいます。私が直面している問題は、2 つのライブラリで 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': 再定義; 異なる基本型 c:\program files (x86)\matlab\r2008a\extern\include\mclmcr.h:216: 「int32_t」の宣言を参照

stackoverflow でこの投稿をたどってみました:

2 つのサードパーティ ライブラリでの uint32 の Typedef 再定義 (C2371)

そして、私はそれを自分のコードに実装しようとしました:

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

それでも同じエラーが発生します。助けてください。

4

1 に答える 1

2

stdint.h もシステム インクルード ファイルです。define/undef 回避策の前に含まれる可能性は十分にあります。回避策としてファイルを再度インクルードしようとすると、インクルージョン ガードが機能します。これを使用して状況を確認できます: Displaying the #include hierarchy for a C++ file in Visual Studio

stdint.h をインクルードする部分を、他のすべてのインクルードの前に、ファイルの一番上に移動することをお勧めします。

システム インクルード ファイル stdint.h を別のバージョンでシャドーイングすると、問題が発生する可能性があります。

于 2014-03-06T16:47:22.710 に答える