помилка ідентифікатора 'uint32_t' не знайдена


94

Я переношу код з 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.03.11

Досить багато !!! #include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h> Дякую !!!
Кевін

Я використовую Visual C ++ express 2008.
kevin

4
@kevin: Ви не можете просто видалити заголовки певної платформи і забути про них. Вам потрібно знайти альтернативи новій платформі. Це часто передбачає певну кількість переписування коду, щоб зробити його портативним.
Гонки легкості на орбіті

Відповіді:


114

Цей тип визначено в заголовку С, <stdint.h>який є частиною стандарту С ++ 11, але не є стандартом у С ++ 03. Відповідно до сторінки Вікіпедії в заголовку , вона не постачалася з Visual Studio до VS2010.

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

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

Сподіваюся, це допомагає!


4
Ви також можете використовувати реалізацію cstdint Boost.
Пітер Хуене,

Я копіюю та вставляю ваш код на свою сторінку. Але вона показує цю помилку "синтаксична помилка: відсутня ';' перед ідентифікатором 'int32_t' "і" специфікатор відсутнього типу - передбачається int. Примітка: C ++ не підтримує default-int ".
Кевін,

Вибач, Пітере, я новачок у C. Що таке реалізація cstdint Boost?
kevin

3
Цілочисельні типи Microsoft фіксованого розміру не закінчуються на "t". Спробуйте просто __int32.
Бен Войгт,

1
u_int32_tі uint32_tне є однотипними; один має додаткове підкреслення після u. Це здається окремою проблемою.
templatetypedef

78

Ви можете #include <cstdint>. Це частина стандарту C ++ з 2011 року.


1
Це, мабуть, має бути прийнятою відповіддю з огляду на обмеження запитання, такі як C ++ та VS2010. Немає необхідності прокручувати власні typedef.
jww

7

У мене та сама помилка, і це виправлено, включивши у файл наступне

#include <stdint.h>

на початку вашого файлу.


Як зазначено у питанні, stdint.h не є частиною компілятора C ++, який використовує OP. Ця відповідь не стосується питання.
IIСпецифічно 04


3

На сторінці проекту msinttypes є реалізація - "Цей проект заповнює відсутність stdint.h та inttypes.h у Microsoft Visual Studio".

У мене немає досвіду з цим впровадженням, але я бачив, як це рекомендували інші на SO.


Це краща та найчастіше застосовувана реалізація.
Філіп Омбредан


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.