"uint32_t" tanımlayıcı bulunamadı hatası


97

Linux C'den Windows için Visual C ++ koduna geçiş yapıyorum.

Visual C ++ bilmiyor, #include <stdint.h>bu yüzden onu yorumladım.

Daha sonra bu 'uint32_t': identifier not foundhataların çoğunu buldum . Nasıl çözülür?


Hangilerini yorumluyorsunuz?
Daniel A. White

3
Ve hangi Visual C ++ sürümlerini kullanıyorsunuz? uint32_tVe diğer kesin genişliği tamsayı türleri, C99 ve C ++ 0 x sadece bir kısmı böylece eski derleyiciler (Visual C ++ gibi 2008 ve öncesi) onları yok.
James McNellis

Bayağı çok !!! #include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h> Teşekkürler !!!
kevin

Visual C ++ express 2008 kullanıyorum.
kevin

4
@kevin: Platforma özel başlıkları kaldıramazsınız ve unutamazsınız. Yeni platform için alternatifler bulmalısınız. Bu genellikle, taşınabilir hale getirmek için kodunuzu bir miktar yeniden yazmayı içerir.
Orbit'te Hafiflik Yarışları

Yanıtlar:


115

Bu tür, <stdint.h>C ++ 11 standardının bir parçası olan ancak C ++ 03'te standart olmayan C başlığında tanımlanır . Başlıktaki Wikipedia sayfasına göre VS2010'a kadar Visual Studio ile birlikte gönderilmemiştir.

Bu arada, Microsoft'un özel tam sayı türlerini C tarafından beklenen türlere eşleyen typedefURL'ler ekleyerek muhtemelen kendi üstbilgi sürümünüzü taklit edebilirsiniz . Örneğin:

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

Bu yardımcı olur umarım!


4
Ayrıca Boost'un cstdint uygulamasını da kullanabilirsiniz.
Peter Huene

Kodunuzu kopyalayıp sayfama yapıştırıyorum. Ancak bu "sözdizimi hatası: eksik ';' 'int32_t' "tanımlayıcısından önce ve" eksik tür belirticisi - int varsayılır. Not: C ++ varsayılan-int'i desteklemez ".
kevin

Üzgünüm Peter, C'de yeniyim. Boost'un cstdint uygulaması nedir?
kevin

3
Microsoft'un sabit boyutlu tam sayı türleri "t" ile bitmez. Sadece dene __int32.
Ben Voigt

1
u_int32_tve uint32_taynı türde değildir; birinin altında fazladan bir alt çizgi vardır u. Bu ayrı bir sorun gibi görünüyor.
templatetypedef

80

Yapabilirsin #include <cstdint>. 2011'den beri standart olan C ++ 'ın bir parçasıdır.


1
Bu, sorunun C ++ ve VS2010 gibi kısıtlamaları dikkate alındığında muhtemelen kabul edilen cevap olmalıdır. Kendi yazı tiplerinizi yuvarlamanıza gerek yok.
jww

7

Aynı hatayı aldım ve aşağıdaki dosyaya dahil olmak üzere düzeltti

#include <stdint.h>

dosyanızın başında.


1
Soruda belirtildiği gibi stdint.h , OP'nin kullandığı C ++ derleyicisinin bir parçası değildir. Bu cevap soruyu ele almıyor.
IInspectable




0

VS2010'da proje çalıştırmak zorunda kaldım ve kodda herhangi bir değişiklik yapamadım. Benim çözümüm vS2013'ü ve VS2010 point VC ++ Dizinleri-> IncludeDirectories to Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ include. Sonra projem sorunsuz bir şekilde derlendi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.