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 davon 'uint32_t': identifier not found
Fehler. Wie kann es gelöst werden?
Kevin
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 davon 'uint32_t': identifier not found
Fehler. Wie kann es gelöst werden?
Vorlagentypdef
Dieser Typ ist im C-Header definiert <stdint.h>
Das ist Teil des C++11-Standards, aber nicht Standard in C++03. Entsprechend die Wikipedia-Seite in der Kopfzeilees wurde bis VS2010 nicht mit Visual Studio ausgeliefert.
In der Zwischenzeit könnten Sie wahrscheinlich Ihre eigene Version des Headers fälschen, indem Sie hinzufügen typedef
ist diese Karte Benutzerdefinierte Ganzzahltypen von Microsoft auf die von C erwarteten Typen. Zum Beispiel:
typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
/* ... etc. ... */
Hoffe das hilft!
Sie können auch die cstdint-Implementierung von Boost verwenden.
– Peter Hüne
2. März 2011 um 2:34 Uhr
Ich kopiere Ihren Code und füge ihn auf meiner Seite ein. Aber es zeigt diesen Fehler “Syntaxfehler: fehlendes ‘;’ vor dem Bezeichner ‘int32_t'” und “fehlender Typbezeichner – int angenommen. Hinweis: C++ unterstützt default-int nicht”.
– Kevin
2. März 2011 um 2:40 Uhr
Sorry Peter, ich bin neu bei C . Was ist die cstdint-Implementierung von Boost?
– Kevin
2. März 2011 um 2:42 Uhr
Die Ganzzahltypen von Microsoft mit fester Größe enden nicht mit “t”. Probieren Sie es einfach aus __int32
.
– Ben Voigt
2. März 2011 um 2:50 Uhr
u_int32_t
und uint32_t
sind nicht vom gleichen Typ; man hat einen zusätzlichen Unterstrich nach dem u
. Das scheint ein separates Problem zu sein.
– Vorlagentypdef
2. März 2011 um 2:59 Uhr
Tigerl
Du kannst #include <cstdint>
. Es ist seit 2011 Teil des C++-Standards.
Dies sollte angesichts der Einschränkungen der Frage, wie C++ und VS2010, wahrscheinlich die akzeptierte Antwort sein. Es besteht keine Notwendigkeit, Ihre eigenen Typedefs zu rollen.
– jww
27. März 2018 um 23:13 Uhr
Ich habe den gleichen Fehler und es wurde behoben, einschließlich der folgenden Datei
#include <stdint.h>
am Anfang Ihrer Datei.
Wie in der Frage erwähnt, stdint.h ist nicht Teil des C++-Compilers, den das OP verwendet. Diese Antwort geht nicht auf die Frage ein.
– Inspektionsfähig
4. Januar 2016 um 14:34 Uhr
ildjarn
Schub.Konfig bietet diese Typedefs für Toolsets an, die sie nicht nativ bereitstellen. Die Dokumentation für diese spezielle Funktion finden Sie hier: Standard-Integer-Typen
Eine Implementierung ist unter verfügbar msinttypes-Projektseite – “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 wird.
Dies ist die bessere und am häufigsten verwendete Implementierung.
– Philippe Ombredanne
23. Juni 2016 um 9:48 Uhr
ST3
Unter Windows verwende ich normalerweise Windows-Typen. Um es zu verwenden, müssen Sie es einschließen <Windows.h>
.
In diesem Fall ist uint32_t UINT32 oder einfach nur UINT.
Alle Typendefinitionen sind hier: http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx
Dies ist die bessere und am häufigsten verwendete Implementierung.
– Philippe Ombredanne
23. Juni 2016 um 9:48 Uhr
Darqer
Ich musste das Projekt in VS2010 ausführen und konnte keine Änderungen im Code vornehmen. Meine Lösung bestand darin, vS2013 zu installieren und in VS2010 VC++ Directories->IncludeDirectories auf Program Files(x86)\Microsoft Visual Studio 12.0\VC\include zu verweisen. Dann wurde mein Projekt ohne Probleme kompiliert.
Welches Include kommentierst du aus?
– Daniel A. Weiß
2. März 2011 um 2:30 Uhr
Und welche Version(en) von Visual C++ verwenden Sie? Das
uint32_t
und andere Integer-Typen mit exakter Breite sind nur Teil von C99 und C++0x, sodass ältere Compiler (wie Visual C++ 2008 und früher) sie nicht haben.– James McNellis
2. März 2011 um 2:34 Uhr
Ziemlich viel !!! #include #include #include #include #include Danke !!!
– Kevin
2. März 2011 um 2:34 Uhr
Ich verwende Visual C++ Express 2008.
– Kevin
2. März 2011 um 2:36 Uhr
@kevin: Sie können plattformspezifische Header nicht einfach entfernen und vergessen. Sie müssen Alternativen für die neue Plattform finden. Dies beinhaltet oft ein gewisses Umschreiben Ihres Codes, um ihn portabel zu machen.
– Leichtigkeitsrennen im Orbit
25. Mai 2011 um 13:07 Uhr