Pengenal 'uint32_t' tidak ditemukan kesalahan


95

Saya mem-porting kode dari Linux C ke Visual C ++ untuk windows.

Visual C ++ tidak tahu #include <stdint.h>jadi saya berkomentar.

Belakangan, saya menemukan banyak 'uint32_t': identifier not foundkesalahan itu. Bagaimana cara mengatasinya?


Yang mana yang Anda komentari?
Daniel A. White

3
Dan, versi Visual C ++ manakah yang Anda gunakan? The uint32_tdan tipe integer tepat-lebar lainnya hanya bagian dari C99 dan C ++ 0x, kompiler jadi lebih tua (seperti Visual C ++ 2008 dan sebelumnya) tidak memiliki mereka.
James McNellis

Cukup banyak !!! #include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h> Terima kasih !!!
kevin

Saya menggunakan Visual C ++ express 2008.
kevin

4
@kevin: Anda tidak bisa begitu saja menghapus header khusus platform dan melupakannya. Anda harus mencari alternatif untuk platform baru. Ini sering kali melibatkan sejumlah penulisan ulang kode Anda untuk membuatnya portabel.
Balapan Ringan di Orbit

Jawaban:


115

Jenis ini didefinisikan di header C <stdint.h>yang merupakan bagian dari standar C ++ 11 tetapi bukan standar di C ++ 03. Menurut halaman Wikipedia di header , itu belum dikirimkan dengan Visual Studio hingga VS2010.

Sementara itu, Anda mungkin dapat memalsukan versi tajuk Anda sendiri dengan menambahkan typedefs yang memetakan jenis bilangan bulat khusus Microsoft ke jenis yang diharapkan oleh C. Misalnya:

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

Semoga ini membantu!


4
Anda juga dapat menggunakan implementasi cstdint Boost.
Peter Huene

Saya menyalin dan menempelkan kode Anda di halaman saya. Tapi itu menunjukkan kesalahan ini "kesalahan sintaks: hilang ';' sebelum pengenal 'int32_t' "dan" penentu tipe hilang - int diasumsikan. Catatan: C ++ tidak mendukung default-int ".
kevin

Maaf Peter, saya baru mengenal C. Apa itu implementasi cstdint Boost?
kevin

3
Jenis integer ukuran tetap Microsoft tidak diakhiri dengan "t". Coba saja __int32.
Ben Voigt

1
u_int32_tdan uint32_tbukan tipe yang sama; satu memiliki garis bawah ekstra setelah u. Sepertinya itu masalah yang terpisah.
templatetypedef

79

Anda bisa #include <cstdint>. Ini bagian dari C ++ - standar sejak 2011.


1
Ini mungkin jawaban yang diterima mengingat kendala pertanyaan, seperti C ++ dan VS2010. Tidak perlu menggulung typedef Anda sendiri.
jww

7

Saya memiliki kesalahan yang sama dan memperbaikinya termasuk dalam file berikut

#include <stdint.h>

di awal file Anda.


1
Seperti yang ditunjukkan dalam pertanyaan, stdint.h bukan bagian dari kompilator C ++ yang digunakan OP. Jawaban ini tidak menjawab pertanyaan tersebut.
IInspectable


3

Ada implementasi yang tersedia di halaman proyek msinttypes - "Proyek ini mengisi ketiadaan stdint.h dan inttypes.h di Microsoft Visual Studio".

Saya tidak memiliki pengalaman dengan implementasi ini, tetapi saya telah melihatnya direkomendasikan oleh orang lain di SO.


Ini implementasi yang lebih baik dan paling umum digunakan.
Philippe Ombredanne


0

Saya harus menjalankan proyek di VS2010 dan saya tidak dapat memperkenalkan modifikasi apa pun dalam kode. Solusi saya adalah menginstal vS2013 dan di VS2010 titik VC ++ Directories-> IncludeDirectories to Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ include. Kemudian proyek saya disusun tanpa masalah apa pun.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.