Błąd „nie znaleziono identyfikatora uint32_t”


96

Przenoszę kod z Linux C na Visual C ++ dla Windows.

Visual C ++ tego nie wie, #include <stdint.h>więc zakomentowałem to.

Później znalazłem wiele takich 'uint32_t': identifier not foundbłędów. Jak można to rozwiązać?


Które z nich komentujesz?
Daniel A. White

3
Których wersji programu Visual C ++ używasz? Te uint32_ti inne typy liczb całkowitych o dokładnej szerokości są tylko częścią C99 i C ++ 0x, więc starsze kompilatory (takie jak Visual C ++ 2008 i wcześniejsze) ich nie mają.
James McNellis,

Całkiem dużo !!! #include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h> Dzięki !!!
kevin

Używam programu Visual C ++ express 2008.
kevin

4
@kevin: Nie możesz po prostu usunąć nagłówków specyficznych dla platformy i zapomnieć o nich. Musisz znaleźć alternatywy dla nowej platformy. Często wymaga to przepisania kodu, aby był przenośny.
Wyścigi lekkości na orbicie

Odpowiedzi:


115

Ten typ jest zdefiniowany w nagłówku C, <stdint.h>który jest częścią standardu C ++ 11, ale nie jest standardem w C ++ 03. Zgodnie ze stroną Wikipedii w nagłówku , nie był on dostarczany z programem Visual Studio do VS2010.

W międzyczasie prawdopodobnie możesz sfałszować własną wersję nagłówka, dodając typedefs, które mapują niestandardowe typy liczb całkowitych firmy Microsoft do typów oczekiwanych przez C. Na przykład:

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

Mam nadzieję że to pomoże!


4
Możesz także użyć implementacji cstdint Boost.
Peter Huene

Kopiuję i wklejam twój kod na mojej stronie. Ale pokazuje ten błąd "błąd składni: brak ';' przed identyfikatorem „int32_t” ”i„ brak specyfikacji typu - założono int. Uwaga: C ++ nie obsługuje wartości default-int ”.
kevin

Przepraszam Peter, jestem nowy w C. Co to jest implementacja cstdint Boost?
kevin

3
Typy liczb całkowitych Microsoft o stałym rozmiarze nie kończą się literą „t”. Spróbuj po prostu __int32.
Ben Voigt

1
u_int32_ti uint32_tnie są tego samego typu; po znaku u. Wydaje się, że to osobny problem.
templatetypedef

79

Możesz #include <cstdint>. Jest częścią C ++ - standardu od 2011 roku.


1
Prawdopodobnie powinna to być akceptowana odpowiedź, biorąc pod uwagę ograniczenia pytania, takie jak C ++ i VS2010. Nie ma potrzeby przewracania własnych typów.
jww

7

Mam ten sam błąd i naprawiłem go włączając w pliku następujący

#include <stdint.h>

na początku pliku.


1
Jak wskazano w pytaniu, stdint.h nie jest częścią kompilatora C ++, którego używa OP. Ta odpowiedź nie odpowiada na pytanie.
Niespodziewane




0

Musiałem uruchomić projekt w VS2010 i nie mogłem wprowadzić żadnych modyfikacji w kodzie. Moim rozwiązaniem była instalacja vS2013, aw VS2010 punkt VC ++ Directories-> IncludeDirectories to Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ include. Wtedy mój projekt skompilował się bez żadnych problemów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.