2012-01-21 43 views
44

Tôi nhận được "tên loại không xác định 'uint8_t'" và những người khác thích nó bằng C trong MinGW. Bất kỳ ý tưởng nào để giải quyết vấn đề này?tên loại không xác định 'uint8_t', MinGW

+1

Vui lòng đăng một số mã. –

+5

bạn có bao gồm 'stdint.h' không? – Necrolis

Trả lời

87

Hãy thử bao gồm stdint.h hoặc inttypes.h.

+0

Tôi vẫn gặp lỗi cho uint32_t, nhưng bao gồm stdint.h đã giải quyết các lỗi khác. – RobotRock

10

Để sử dụng uint8_t bí danh loại, bạn phải bao gồm stdint.h tiêu đề chuẩn.

3

Bạn cần phải #includestdint.h TRƯỚC KHI bạn #include bất kỳ giao diện thư viện nào khác cần đến.

Ví dụ:

thư viện LCD của tôi sử dụng các loại uint8_t. Tôi đã viết thư viện của mình bằng giao diện (Display.h) và triển khai (Display.c)

Trong display.c, tôi có những điều sau đây bao gồm.

#include <stdint.h> 
#include <string.h> 
#include <avr/io.h> 
#include <Display.h> 
#include <GlobalTime.h> 

Và tính năng này hoạt động.

Tuy nhiên, nếu tôi tái sắp xếp chúng như vậy:

#include <string.h> 
#include <avr/io.h> 
#include <Display.h> 
#include <GlobalTime.h> 
#include <stdint.h> 

tôi nhận được lỗi bạn mô tả. Điều này là do Display.h cần mọi thứ từ stdint.h nhưng không thể truy cập vào vì thông tin đó được biên dịch SAU Hiển thị.h được biên dịch.

Vì vậy, hãy di chuyển stdint.h phía trên bất kỳ thư viện nào cần thư viện và bạn sẽ không gặp phải lỗi nữa.

+14

Đó chỉ là thiết kế kém, 'Display.h' phải chứa' #include '. Đừng dựa vào tệp bao gồm để bao gồm mọi thứ cho bạn. Đó là những gì bảo vệ tiêu đề đang ở đây cho. – Jerska

+0

Đó là một chút không đầy đủ. Bạn có thể mở rộng hoặc cung cấp một tài liệu tham khảo về lý do tại sao không bao gồm trong tệp nguồn không? Bao gồm của tôi không cung cấp các loại cần thiết bởi các hàm mà thư viện cung cấp, vì vậy tôi sẽ không nghĩ rằng chúng cần phải nằm trong tệp tiêu đề. – LanchPad

+0

Ngay sau khi bạn sử dụng bất kỳ thứ gì từ bất kỳ tiêu đề nào trong bất kỳ tệp nào, bạn chỉ cần đưa tệp đó vào nguồn của mình. Tôi không nói bạn nên bao gồm tất cả các tập tin trong tiêu đề (tôi cũng đã làm, nhưng chỉnh sửa lâu trước khi bạn trả lời). Trong nhận xét của tôi, tôi chỉ chỉ ra cách thiết kế tồi tệ là phải bao gồm một tệp trước một tệp khác để làm cho nó hoạt động. Nó sẽ không giúp bạn tiết kiệm không gian hay bất cứ thứ gì vì bạn sẽ cần phải làm điều này bao gồm mỗi lần trước khi tệp của bạn. Nếu 'Display.h' của bạn cần' stdint.h', nó không phải là bình thường để không đưa trực tiếp vào nó. – Jerska

Các vấn đề liên quan