Errore identificativo "uint32_t" non trovato


94

Sto portando il codice da Linux C a Visual C ++ per Windows.

Visual C ++ non lo sa, #include <stdint.h>quindi l'ho commentato.

Successivamente, ho trovato molti di questi 'uint32_t': identifier not founderrori. Come risolverlo?


Quale include stai commentando?
Daniel A. White

3
E quale versione di Visual C ++ stai utilizzando? Gli uint32_taltri tipi interi di larghezza esatta sono solo una parte di C99 e C ++ 0x, quindi i compilatori meno recenti (come Visual C ++ 2008 e precedenti) non li hanno.
James McNellis

Parecchio !!! #include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h> Grazie !!!
kevin

Sto usando Visual C ++ express 2008.
kevin

4
@kevin: non puoi semplicemente rimuovere le intestazioni specifiche della piattaforma e dimenticartene. Devi trovare alternative per la nuova piattaforma. Ciò spesso comporta una certa quantità di riscrittura del codice per renderlo portabile.
Gare di leggerezza in orbita

Risposte:


114

Questo tipo è definito nell'intestazione C <stdint.h>che fa parte dello standard C ++ 11 ma non standard in C ++ 03. Secondo la pagina di Wikipedia nell'intestazione , non è stato fornito con Visual Studio fino a VS2010.

Nel frattempo, potresti probabilmente falsificare la tua versione dell'intestazione aggiungendo typedefs che mappano i tipi interi personalizzati di Microsoft ai tipi previsti da C. Ad esempio:

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

Spero che questo ti aiuti!


4
Puoi anche usare l'implementazione di cstdint di Boost.
Peter Huene

Copio e incollo il tuo codice sulla mia pagina. Ma mostra questo errore "errore di sintassi: mancante ';' prima dell'identificatore 'int32_t' "e" specificatore di tipo mancante - si presume int. Nota: C ++ non supporta default-int ".
kevin

Scusa Peter, sono nuovo in C. Qual è l'implementazione di cstdint di Boost?
kevin

3
I tipi interi a dimensione fissa di Microsoft non terminano con "t". Prova solo __int32.
Ben Voigt

1
u_int32_te uint32_tnon sono dello stesso tipo; uno ha un carattere di sottolineatura extra dopo il u. Sembra un problema separato.
templatetypedef

78

Puoi #include <cstdint>. Fa parte di C ++ - standard dal 2011.


1
Questa dovrebbe probabilmente essere la risposta accettata dati i vincoli della domanda, come C ++ e VS2010. Non è necessario eseguire il rollio dei propri typedef.
jww

7

Ho lo stesso errore e l'ho risolto includendo nel file quanto segue

#include <stdint.h>

all'inizio del file.


Come sottolineato nella domanda, stdint.h non fa parte del compilatore C ++ utilizzato dall'OP. Questa risposta non risponde alla domanda.
Rilevabile il


3

È disponibile un'implementazione nella pagina del progetto msinttypes - "Questo progetto riempie l'assenza di stdint.he inttypes.h in Microsoft Visual Studio".

Non ho esperienza con questa implementazione, ma l'ho vista consigliata da altri su SO.


Questa è l'implementazione migliore e più comunemente utilizzata.
Philippe Ombredanne


0

Ho dovuto eseguire il progetto in VS2010 e non ho potuto introdurre alcuna modifica nel codice. La mia soluzione era installare vS2013 e in VS2010 punto VC ++ Directories-> IncludeDirectories in Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ include. Quindi il mio progetto è stato compilato senza problemi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.