Ich versuche, ein C ++ - Softwarepaket zu kompilieren, das 2007 geschrieben wurde, und erhalte folgende Fehlermeldung:
error: ‘uint32_t’ does not name a type
Dies geschieht in 64-Bit-Ubuntu mit g ++ 4.5.2. Es wird unter 64-Bit-CentOS mit g ++ 4.1.2 problemlos kompiliert.
Gibt es ein #include
oder ein Compiler-Flag, das mir fehlt? Oder sollte ich verwenden typedef
, um uint32_t
einem size_t
oder vielleicht einem zuzuweisen unsigned int
?
#include <stdint.h>
? Sieht aus wie ein möglicher Fehler unter 64-Bit-Ubuntu. Haben Sie auch eine-std=c++98
oder eine solche Befehlszeilenoption für gcc? Wenn ja, können Sie überprüfen, ob es bei Verwendung einwandfrei kompiliert wird-std=gnu++98
?std
Optionen.Antworten:
Sie müssen stdint.h einschließen
#include <stdint.h>
quelle
cstdint
.boost/cstdint.hpp
nicht gefunden wurde.yum install boost-devel
habe meinen Fall behoben.C
mit GCC?Sie müssen
#include <cstdint>
, aber das funktioniert möglicherweise nicht immer.Das Problem ist, dass einige Compiler häufig automatisch Namen exportieren, die in verschiedenen Headern oder bereitgestellten Typen definiert sind, bevor solche Standards vorhanden waren.
Jetzt sagte ich "funktioniert möglicherweise nicht immer." Dies liegt daran, dass der cstdint-Header Teil des C ++ 11-Standards ist und auf aktuellen C ++ - Compilern nicht immer verfügbar ist (dies ist jedoch häufig der Fall). Der Header stdint.h ist das C-Äquivalent und Teil von C99.
Für eine optimale Portabilität würde ich die Verwendung des Boost-
boost/cstdint.hpp
Headers empfehlen , wenn Sie Boost verwenden möchten. Andernfalls werden Sie wahrscheinlich mit # include'ing davonkommen können<cstdint>
.quelle
#error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.
Ich habe auch das gleiche Problem unter Mac OS X 10.6.8 festgestellt und leider hat das Hinzufügen
#include <stdint.h>
oder Hinzufügen<cstdint.h>
der entsprechenden Datei mein Problem nicht gelöst. Nach mehr Suche fand ich jedoch diese Lösung, die empfohlen wurde, hinzuzufügen,#include <sys/types.h>
was für mich gut funktionierte!quelle
Bei den anderen Antworten wird davon ausgegangen, dass Ihr Compiler C ++ 11-kompatibel ist. Das ist in Ordnung, wenn es so ist. Aber was ist, wenn Sie einen älteren Compiler verwenden?
Ich habe den folgenden Hack irgendwo im Netz aufgenommen. Es funktioniert gut genug für mich:
#if defined __UINT32_MAX__ or UINT32_MAX #include <inttypes.h> #else typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; typedef unsigned long long uint64_t; #endif
Es ist natürlich nicht tragbar. Aber es könnte für Ihren Compiler funktionieren.
quelle
Fügen Sie Folgendes in die Datei base.mk ein. Die folgende 3. Zeile ist wichtig
-include $(TOP)/defs.mk
CFLAGS=$(DEBUG) -Wall -W -Wwrite-strings CFLAGS_C=-Wmissing-prototypes CFLAGS_CXX=-std=c++0x LDFLAGS= LIBS=
um den Fehler zu vermeiden Diese Datei erfordert Compiler- und Bibliotheksunterstützung für den kommenden ISO C ++ - Standard C ++ 0x. Diese Unterstützung ist derzeit experimentell und muss mit den Compileroptionen -std = c ++ 0x oder -std = gnu ++ 0x aktiviert werden
quelle
wenn es passiert ist, wenn Sie den OpenCV-Header einschließen.
Ich würde empfehlen, die Reihenfolge der Header zu ändern.
Platzieren Sie die opencv-Header direkt unter dem Standard-C ++ - Header.
so was:
#include<iostream> #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp>
quelle
Ich hatte das gleiche Problem beim Versuch, eine Bibliothek zu kompilieren, die ich aus dem Internet heruntergeladen habe. In meinem Fall war bereits ein
#include <cstdint>
im Code. Ich habe es gelöst und Folgendes hinzugefügt:using std::uint32_t;
quelle
#include
den richtigen Header verwenden, bevor Sie auf den Typ zugreifen können.#include
wird benötigt. Ich habe nicht gesagt, dass es nicht ist. Aber da es in meinem Fall ein#include <cstdint>
war und es keinen gabusing namespace std
, konnte der Compiler den Namen nicht auflösenuint32_t
. Das ist der Grund, warum ich denusing std::uint32_t;
Navigieren Sie einfach zu / usr / include / x86_64-linux-gnu / bits, öffnen Sie stdint-uintn.h und fügen Sie diese Zeilen hinzu
typedef __uint8_t uint8_t; typedef __uint16_t uint16_t; typedef __uint32_t uint32_t; typedef __uint64_t uint64_t;
Öffnen Sie erneut stdint-intn.h und fügen Sie hinzu
typedef __int8_t int8_t; typedef __int16_t int16_t; typedef __int32_t int32_t; typedef __int64_t int64_t;
Beachten Sie, dass diese Zeilen bereits vorhanden sind. Kopieren Sie einfach die fehlenden Zeilen und fügen Sie sie hinzu.
quelle
Sie müssen iostream einschließen
#include <iostream> using namespace std;
quelle