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?

kevin
sumber
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!

templatetypedef
sumber
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.

Tigerle
sumber
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.

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

Boost . Config menawarkan typedef ini untuk kumpulan alat yang tidak menyediakannya secara asli. Dokumentasi untuk fungsionalitas khusus ini ada di sini: Jenis Integer Standar

ildjarn
sumber
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.

Brandon Leiran
sumber
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.

Darqer
sumber