lỗi không tìm thấy mã định danh 'uint32_t'


94

Tôi đang chuyển mã từ Linux C sang Visual C ++ cho Windows.

Visual C ++ không biết #include <stdint.h>vì vậy tôi đã nhận xét nó ra.

Sau này, tôi tìm thấy rất nhiều 'uint32_t': identifier not foundlỗi đó. Làm thế nào nó có thể được giải quyết?


Bạn đang bình luận bao gồm những gì?
Daniel A. White

3
Và, bạn đang sử dụng (các) phiên bản Visual C ++ nào? Các uint32_tkiểu số nguyên có độ rộng chính xác khác chỉ là một phần của C99 và C ++ 0x, vì vậy các trình biên dịch cũ hơn (như Visual C ++ 2008 trở về trước) không có chúng.
James McNellis

Khá nhiều !!! #include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h> Cảm ơn !!!
kevin

Tôi đang sử dụng Visual C ++ express 2008.
kevin

4
@kevin: Bạn không thể chỉ xóa các tiêu đề dành riêng cho nền tảng và quên chúng đi. Bạn phải tìm các giải pháp thay thế cho nền tảng mới. Điều này thường liên quan đến một số lần viết lại mã của bạn để làm cho nó di động.
Lightness Races in Orbit

Câu trả lời:


114

Loại này được định nghĩa trong tiêu đề C <stdint.h>là một phần của tiêu chuẩn C ++ 11 nhưng không phải là tiêu chuẩn trong C ++ 03. Theo trang Wikipedia trên tiêu đề , nó vẫn chưa xuất xưởng với Visual Studio cho đến VS2010.

Trong thời gian chờ đợi, bạn có thể giả mạo phiên bản tiêu đề của riêng mình bằng cách thêm typedefs ánh xạ các loại số nguyên tùy chỉnh của Microsoft với các loại được mong đợi bởi C. Ví dụ:

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

Hi vọng điêu nay co ich!


4
Bạn cũng có thể sử dụng triển khai cstdint của Boost.
Peter Huene

Tôi sao chép và dán mã của bạn trên trang của tôi. Nhưng nó hiển thị lỗi này "lỗi cú pháp: thiếu ';' trước mã định danh 'int32_t' "và" mã định danh loại bị thiếu - giả định là int. Lưu ý: C ++ không hỗ trợ default-int ".
kevin

Xin lỗi Peter, tôi mới đến C. Triển khai cstdint của Boost là gì?
kevin

3
Các kiểu số nguyên có kích thước cố định của Microsoft không kết thúc bằng "t". Hãy thử chỉ __int32.
Ben Voigt

1
u_int32_tuint32_tkhông cùng loại; một cái có thêm một gạch dưới sau u. Đó dường như là một vấn đề riêng biệt.
templatetypedef

78

Bạn có thể #include <cstdint>. Nó là một phần của C ++ - tiêu chuẩn từ năm 2011.


1
Đây có lẽ nên là câu trả lời được chấp nhận dựa trên các ràng buộc của câu hỏi, như C ++ và VS2010. Không cần phải cuộn typedef của riêng bạn.
jww

7

Tôi gặp lỗi tương tự và nó đã sửa nó bao gồm trong tệp sau

#include <stdint.h>

ở đầu tệp của bạn.


Như đã chỉ ra trong câu hỏi, stdint.h không phải là một phần của trình biên dịch C ++ mà OP đang sử dụng. Câu trả lời này không giải quyết câu hỏi.
IInspectable


3

Có một triển khai có sẵn tại trang dự án msinttypes - "Dự án này lấp đầy sự thiếu vắng của stdint.h và inttypes.h trong Microsoft Visual Studio".

Tôi không có kinh nghiệm với việc triển khai này, nhưng tôi đã thấy nó được những người khác trên SO giới thiệu.


Đây là cách triển khai tốt hơn và được sử dụng phổ biến nhất.
Philippe Ombredanne


0

Tôi đã phải chạy dự án trong VS2010 và tôi không thể giới thiệu bất kỳ sửa đổi nào trong mã. Giải pháp của tôi là cài đặt vS2013 và trong VS2010 point VC ++ Directories-> includeDirectories to Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ include. Sau đó, dự án của tôi được biên dịch mà không có bất kỳ vấn đề nào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.