visual studio 2008错误C2371:'int8_t':重新定义;不同的基本类型(http_parser.h)
问题描述:
我尝试编译简单的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
答
由于这是一个typedef
,你不能使用#ifdef
或#undef
等,因为这些只适用于编号为#define
的符号。
你可以做的最好的是确保两个typedef
的同意,应该没有问题。
看着stdint-msvc2008.h
,它可能是更容易修改http_parser.h
这样的:
typedef signed __int8 int8_t;
有什么好?
你能告诉我为什么添加signd来解决问题吗? – user63898 2013-05-07 12:45:49
@ user63898 - 我猜是因为'__int8'可以是有符号或无符号的,编译器在比较'typedef'时坚持修饰符是相同的。虽然'signed'是默认的(根据MSDN),编译器选项可以使'unsigned'成为默认值。 – 2013-05-07 12:56:11