2012-01-21 5 views

ответ

87

Попробуйте включить stdint.h или inttypes.h.

+0

Я все еще получаю сообщение об ошибке для uint32_t, но в том числе stdint.h действительно решает остальные. – RobotRock

10

Чтобы использовать псевдоним типа uint8_t, вы должны включить стандартный заголовок stdint.h.

3

#includestdint.h ПЕРЕД ВАМИ #include любые другие интерфейсы библиотеки, в которых это нуждается.

Пример:

Моя библиотека использует LCD uint8_t типы. Я написал свою библиотеку с интерфейсом (Display.h) и реализацией (Display.c)

В display.c у меня есть следующие варианты.

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

И это работает.

Однако, если я переставить их так:

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

Я получаю ошибку вы описываете. Это связано с тем, что Display.h нуждается в вещах от stdint.h, но не может получить к нему доступ, потому что эта информация скомпилирована ПОСЛЕ отображения Display.h.

Итак, переместите stdint.h над любой библиотекой, которая в ней нуждается, и вы больше не должны получать ошибку.

+14

Это просто плохой дизайн, 'Display.h' должен содержать' #include '. Не полагайтесь на включенный файл, чтобы включить в него вещи. Вот для чего нужны охранники. – Jerska

+0

Это немного неполно. Можете ли вы расширить или предоставить ссылку на то, почему include не должен находиться в исходном файле? Мои включенные не предоставляют типы, необходимые для функций, предоставляемых библиотекой, поэтому я не думаю, что они должны быть в файле заголовка. – LanchPad

+0

Как только вы используете что-либо из любого заголовка в любом файле, вы просто включаете этот файл в свой источник. Я не сказал, что вы должны включить все файлы в заголовок (ну, я сделал, но отредактировал задолго до того, как вы ответили). В своем комментарии я только указываю, как плохой дизайн должен включать файл перед другим, чтобы заставить его работать. Это не сэкономит вам какое-либо место или что-то еще, потому что вам нужно будет включать это каждый раз перед вашим файлом. Если ваш 'Display.h' нуждается в' stdint.h', это не нормально, если вы не включите его прямо в него. – Jerska

Смежные вопросы