'uint32_t' Bezeichner nicht gefunden Fehler

93

Ich portiere Code von Linux C nach Visual C ++ für Windows.

Visual C ++ weiß es nicht, #include <stdint.h>also habe ich es auskommentiert.

Später fand ich viele dieser 'uint32_t': identifier not foundFehler. Wie kann es gelöst werden?

Kevin
quelle
Welches Include kommentierst du aus?
Daniel A. White
3
Und welche Version (en) von Visual C ++ verwenden Sie? Die uint32_tund andere Integer-Typen mit exakter Breite sind nur Teil von C99 und C ++ 0x, sodass ältere Compiler (wie Visual C ++ 2008 und frühere) sie nicht haben.
James McNellis
Ziemlich viel !!! #include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h> Danke !!!
Kevin
Ich verwende Visual C ++ Express 2008.
Kevin
4
@kevin: Sie können nicht einfach plattformspezifische Header entfernen und diese vergessen. Sie müssen Alternativen für die neue Plattform finden. Dies erfordert häufig ein gewisses Umschreiben Ihres Codes, um ihn portabel zu machen.
Leichtigkeitsrennen im Orbit

Antworten:

113

Dieser Typ wird im C-Header definiert, der <stdint.h>Teil des C ++ 11-Standards ist, in C ++ 03 jedoch nicht Standard. Laut der Wikipedia-Seite in der Kopfzeile wurde es erst mit VS2010 mit Visual Studio ausgeliefert.

In der Zwischenzeit könnten Sie wahrscheinlich Ihre eigene Version des Headers fälschen, indem Sie typedefs diese Karte hinzufügen die die benutzerdefinierten Integer-Typen von Microsoft den von C erwarteten Typen zuordnen. Beispiel:

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

Hoffe das hilft!

templatetypedef
quelle
4
Sie können auch die cstdint-Implementierung von Boost verwenden.
Peter Huene
Ich kopiere Ihren Code und füge ihn auf meiner Seite ein. Aber es zeigt diesen Fehler "Syntaxfehler: fehlt ';' vor dem Bezeichner 'int32_t' "und" fehlender Typbezeichner - int angenommen. Hinweis: C ++ unterstützt nicht default-int ".
Kevin
Sorry Peter, ich bin neu bei C. Was ist die cstdint-Implementierung von Boost?
Kevin
3
Microsofts Integer-Typen mit fester Größe enden nicht mit "t". Versuchen Sie es einfach __int32.
Ben Voigt
1
u_int32_tund uint32_tsind nicht der gleiche Typ; man hat einen zusätzlichen Unterstrich nach dem u. Das scheint ein separates Problem zu sein.
Templatetypedef
78

Du kannst #include <cstdint>. Es ist Teil des C ++ - Standards seit 2011.

Tigerle
quelle
1
Dies sollte angesichts der Einschränkungen der Frage wie C ++ und VS2010 wahrscheinlich die akzeptierte Antwort sein. Sie müssen keine eigenen Typedefs rollen.
JWW
7

Ich habe den gleichen Fehler und er wurde behoben, einschließlich der folgenden in der Datei

#include <stdint.h>

am Anfang Ihrer Datei.

Nacho Barreto
quelle
Wie in der Frage ausgeführt, ist stdint.h nicht Teil des C ++ - Compilers, den das OP verwendet. Diese Antwort geht nicht auf die Frage ein.
Unsichtbarer
7

Boost . Config bietet diese Typedefs für Toolsets an, die sie nicht nativ bereitstellen. Die Dokumentation für diese spezielle Funktionalität finden Sie hier: Standard Integer Types

ildjarn
quelle
3

Auf der Projektseite von msinttypes ist eine Implementierung verfügbar - "Dieses Projekt füllt das Fehlen von stdint.h und inttypes.h in Microsoft Visual Studio".

Ich habe keine Erfahrung mit dieser Implementierung, aber ich habe gesehen, dass sie von anderen auf SO empfohlen wurde.

Brandon Leiran
quelle
Dies ist die bessere und am häufigsten verwendete Implementierung.
Philippe Ombredanne
0

Ich musste das Projekt in VS2010 ausführen und konnte keine Änderungen am Code vornehmen. Meine Lösung bestand darin, vS2013 und in VS2010 Punkt VC ++ Directories-> IncludeDirectories to Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ include zu installieren. Dann wurde mein Projekt ohne Probleme kompiliert.

Darqer
quelle