Идентификатор uint32_t не найден, ошибка

95

Я портирую код с Linux C на Visual C ++ для Windows.

Visual C ++ не знает, #include <stdint.h>поэтому я закомментировал это.

Позже я обнаружил много таких 'uint32_t': identifier not foundошибок. Как это решить?

Кевин
источник
Какие из них вы комментируете?
Дэниел А. Уайт
3
И какие версии Visual C ++ вы используете? Этот uint32_tи другие целочисленные типы точной ширины являются только частью C99 и C ++ 0x, поэтому в более старых компиляторах (например, Visual C ++ 2008 и ранее) их нет.
Джеймс МакНеллис 02
Достаточно много !!! #include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h> Спасибо !!!
Кевин
Я использую Visual C ++ express 2008.
Кевин
4
@kevin: Нельзя просто удалить заголовки, зависящие от платформы, и забыть о них. Вы должны найти альтернативы новой платформе. Это часто требует некоторого переписывания кода, чтобы сделать его переносимым.
Гонки легкости на орбите

Ответы:

115

Этот тип определен в заголовке C, <stdint.h>который является частью стандарта C ++ 11, но не является стандартом C ++ 03. Согласно странице Википедии в заголовке , он не поставлялся с Visual Studio до VS2010.

Тем временем вы, вероятно, могли бы подделать свою собственную версию заголовка, добавив typedefs, которые сопоставляют настраиваемые целочисленные типы Microsoft с типами, ожидаемыми C. Например:

typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
/* ... etc. ... */

Надеюсь это поможет!

templatetypedef
источник
4
Вы также можете использовать реализацию cstdint Boost.
Peter Huene
Копирую и вставляю ваш код на свою страницу. Но он показывает эту ошибку "синтаксическая ошибка: отсутствует ';' перед идентификатором 'int32_t' "и" отсутствует спецификатор типа - предполагается int. Примечание: C ++ не поддерживает default-int ".
Кевин
Извини, Питер, я новичок в C. Что такое реализация cstdint Boost?
Кевин
3
Целочисленные типы фиксированного размера Microsoft не заканчиваются на "t". Просто попробуй __int32.
Ben Voigt
1
u_int32_tи uint32_tне одного типа; у одного есть лишнее подчеркивание после u. Кажется, это отдельная проблема.
templatetypedef
79

Вы можете #include <cstdint>. Это часть C ++ - стандарт с 2011 года.

Тигрле
источник
1
Вероятно, это должен быть принятый ответ с учетом ограничений вопроса, таких как C ++ и VS2010. Нет необходимости катить собственный typedef.
jww
7

У меня такая же ошибка, и она исправлена, включая в файл следующие

#include <stdint.h>

в начале вашего файла.

Начо Баррето
источник
1
Как указано в вопросе, stdint.h не является частью компилятора C ++, который использует OP. Этот ответ не отвечает на вопрос.
IInspectable 04
3

На странице проекта msinttypes доступна реализация - «Этот проект восполняет отсутствие stdint.h и inttypes.h в Microsoft Visual Studio».

У меня нет опыта работы с этой реализацией, но я видел, как другие рекомендовали ее на SO.

Брэндон Лейран
источник
Это лучшая и наиболее часто используемая реализация.
Philippe Ombredanne
0

Мне пришлось запустить проект в VS2010, и я не мог внести никаких изменений в код. Мое решение заключалось в том, чтобы установить vS2013 и в VS2010 указать каталоги VC ++-> IncludeDirectories to Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ include. Потом мой проект скомпилировался без проблем.

Даркер
источник