ไม่พบข้อผิดพลาดตัวระบุ 'uint32_t'


95

ฉันกำลังโอนรหัสจาก Linux C ไปยัง Visual C ++ สำหรับ Windows

Visual C ++ ไม่ทราบ#include <stdint.h>ดังนั้นฉันจึงแสดงความคิดเห็นออกไป

ต่อมาฉันพบ'uint32_t': identifier not foundข้อผิดพลาดเหล่านั้นมากมาย จะแก้ไขได้อย่างไร?


คุณกำลังแสดงความคิดเห็นใดบ้าง
Daniel A. White

3
และคุณใช้ Visual C ++ เวอร์ชันใดอยู่ uint32_tและประเภทจำนวนเต็มแน่นอนความกว้างอื่น ๆ เป็นเพียงส่วนหนึ่งของ C99 และ C ++ 0x คอมไพเลอร์เพื่อให้เก่า (เช่น Visual C ++ 2008 และก่อนหน้านี้) ไม่ได้พวกเขา
James McNellis

ค่อนข้างมาก !!! #include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h> ขอบคุณ !!!
kevin

ฉันใช้ Visual C ++ express 2008
kevin

4
@kevin: คุณไม่สามารถลบส่วนหัวเฉพาะแพลตฟอร์มและลืมมันได้ คุณต้องหาทางเลือกอื่นสำหรับแพลตฟอร์มใหม่ ซึ่งมักจะเกี่ยวข้องกับการเขียนโค้ดของคุณใหม่จำนวนหนึ่งเพื่อให้พกพาได้
Lightness Races ใน Orbit

คำตอบ:


115

ประเภทนี้กำหนดไว้ในส่วนหัว C <stdint.h>ซึ่งเป็นส่วนหนึ่งของมาตรฐาน C ++ 11 แต่ไม่ใช่มาตรฐานใน C ++ 03 ตามหน้า Wikipedia ในส่วนหัวยังไม่ได้จัดส่งพร้อม Visual Studio จนถึง VS2010

ในระหว่างนี้คุณอาจปลอมส่วนหัวเวอร์ชันของคุณเองโดยการเพิ่มtypedefs ที่จับคู่ประเภทจำนวนเต็มที่กำหนดเองของ Microsoftกับประเภทที่ C คาดไว้ตัวอย่างเช่น:

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

หวังว่านี่จะช่วยได้!


4
คุณยังสามารถใช้การใช้ cstdint ของ Boost
Peter Huene

ฉันคัดลอกและวางรหัสของคุณบนหน้าของฉัน แต่มันแสดงข้อผิดพลาดนี้ "syntax error: missing ';' ก่อนตัวระบุ "int32_t" "และ" ตัวระบุประเภทที่ขาดหายไป - สมมติว่า int หมายเหตุ: C ++ ไม่สนับสนุนค่าเริ่มต้น-int "
kevin

ขอโทษปีเตอร์ฉันเพิ่งรู้จัก C การใช้ cstdint ของ Boost คืออะไร?
kevin

3
ประเภทจำนวนเต็มขนาดคงที่ของ Microsoft ไม่ได้ลงท้ายด้วย "t" ลองแค่__int32.
Ben Voigt

1
u_int32_tและuint32_tไม่ใช่ประเภทเดียวกัน หนึ่งมีขีดล่างพิเศษหลังu. ดูเหมือนว่าเป็นปัญหาที่แยกจากกัน
templatetypedef

79

#include <cstdint>คุณสามารถ เป็นส่วนหนึ่งของ C ++ - มาตรฐานตั้งแต่ปี 2554


1
นี่น่าจะเป็นคำตอบที่ยอมรับได้เนื่องจากข้อ จำกัด ของคำถามเช่น C ++ และ VS2010 ไม่จำเป็นต้องม้วน typedef ของคุณเอง
jww

7

ฉันมีข้อผิดพลาดเดียวกันและได้รับการแก้ไขรวมทั้งในไฟล์ต่อไปนี้

#include <stdint.h>

ที่จุดเริ่มต้นของไฟล์ของคุณ


1
ตามที่ระบุไว้ในคำถามstdint.hไม่ได้เป็นส่วนหนึ่งของคอมไพเลอร์ C ++ ที่ OP ใช้ คำตอบนี้ไม่ตรงกับคำถาม
IInspectable

7

การส่งเสริม Configนำเสนอ typedefs เหล่านี้สำหรับชุดเครื่องมือที่ไม่ได้จัดเตรียมไว้ในตัว เอกสารสำหรับฟังก์ชันเฉพาะนี้อยู่ที่นี่: Standard Integer types


3

มีการนำไปใช้งานที่หน้าโครงการ msinttypes - "โครงการนี้เติมส่วนที่ไม่มี stdint.h และ inttypes.h ใน Microsoft Visual Studio"

ฉันไม่มีประสบการณ์เกี่ยวกับการใช้งานนี้ แต่ฉันเห็นว่าแนะนำโดยผู้อื่นใน SO


นี่เป็นการใช้งานที่ดีกว่าและใช้กันมากที่สุด
Philippe Ombredanne


0

ฉันต้องรันโปรเจ็กต์ใน VS2010 และไม่สามารถแนะนำการแก้ไขใด ๆ ในโค้ดได้ วิธีแก้ปัญหาของฉันคือการติดตั้ง vS2013 และใน VS2010 point VC ++ Directories-> IncludeDirectories to Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ include จากนั้นโครงการของฉันก็รวบรวมโดยไม่มีปัญหาใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.