Visual Studio 2008 ошибка C2371: "int8_t": переопределение; различные основные типы (http_parser.h)

Я пытаюсь скомпилировать простое приложение на языке c/ C++, которое использует http_parser из node.js. Я также использую libuv, и в основном пытаюсь скомпилировать этот пример в Windows. с использованием Visual Studio 2008

но я получаю эту ошибку компиляции:

>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

как вы можете видеть, я пытался отменить это, но это не сработало. Что я могу сделать, чтобы он прошел компиляцию. если я просто удаляю его, я получаю эту ошибку:

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

1 ответ

Решение

Как это typedef, вы не можете использовать #ifdef или же #undef и т.д., потому что они работают только с символами, которые были #define"Ред.

Лучшее, что вы можете сделать, это убедиться, что два typedefсогласен, проблем быть не должно.

Смотря на stdint-msvc2008.hможет быть проще изменить http_parser.h к этому:

typedef signed __int8 int8_t;

Любой хороший?

Пытаться #define HAVE_STDINT_H 1 в верхней части кода, чтобы избежать переопределения int8_t.

Другие вопросы по тегам