Идентификатор 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. ... */

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


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. Потом мой проект скомпилировался без проблем.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.