2013-05-07 76 views
2

我嘗試編譯簡單的c/C++應用程序,它使用來自node.js的http_parser 我也使用libuv,並且基本上試圖在Windows中編譯this示例。使用Visual Studio 2008visual studio 2008錯誤C2371:'int8_t':重新定義;不同的基本類型(http_parser.h)

,但我得到這個編譯錯誤 :

>d:\dev\cpp\servers\libuv\libuv_http_server\http_parser.h(35) : error C2371: 'int8_t' : redefinition; different basic types 
1>  d:\dev\cpp\servers\libuv\libuv-master\libuv-master\include\uv-private\stdint-msvc2008.h(82) : see declaration of 'int8_t' 

在http_parser.h文件中的代碼看起來是這樣的:

#include <sys/types.h> 
#if defined(_WIN32) && !defined(__MINGW32__) && (!defined(_MSC_VER) || _MSC_VER<1600) 
#include <BaseTsd.h> 
#include <stddef.h> 
//#undef __int8 
typedef __int8 int8_t; 
typedef unsigned __int8 uint8_t; 
typedef __int16 int16_t; 
typedef unsigned __int16 uint16_t; 
typedef __int32 int32_t; 
typedef unsigned __int32 uint32_t; 
typedef __int64 int64_t; 
typedef unsigned __int64 uint64_t; 
#else 
#include <stdint.h> 
#endif 

,你可以看到我tryed到民主基金但它沒有奏效。 我該怎麼做才能通過編譯。 如果我只是將其刪除即時收到此錯誤:

http_parser.c(180) : error C2061: syntax error : identifier 'unhex' 

這個代碼段:

static const int8_t unhex[256] = 
    {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 
    ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 
    ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 
    , 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1 
    ,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1 
    ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 
    ,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1 
    ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 
    }; 

和許多其他部分在使用中int8_t

回答

3

由於這是一個typedef,你不能使用#ifdef#undef等,因爲這些只適用於編號爲#define的符號。

你可以做的最好的是確保兩個typedef的同意,應該沒有問題。

看着stdint-msvc2008.h,它可能是更容易修改http_parser.h這樣的:

typedef signed __int8 int8_t; 

有什麼好?

+0

你能告訴我爲什麼添加signd來解決問題嗎? – user63898 2013-05-07 12:45:49

+1

@ user63898 - 我猜是因爲'__int8'可以是有符號或無符號的,編譯器在比較'typedef'時堅持修飾符是相同的。雖然'signed'是默認的(根據MSDN),編譯器選項可以使'unsigned'成爲默認值。 – 2013-05-07 12:56:11

相關問題