web-dev-qa-db-fra.com

nom de type inconnu 'uint8_t', MinGW

Je reçois "nom de type inconnu 'uint8_t'" et d'autres personnes du même type utilisant C dans MinGW. Des idées pour résoudre ça?

60
RobotRock

Essayez d'inclure stdint.h ou inttypes.h.

120
cnicutar

Utiliser uint8_t type alias, vous devez inclure stdint.h en-tête standard.

16
ouah

EDIT:

Pour être clair: Si l'ordre de votre #include Est important et qu'il ne fait pas partie de votre motif de conception (lisez: vous ne savez pas pourquoi), vous devez repenser votre conception. Très probablement, cela signifie simplement que vous devez ajouter le #include Au fichier d’en-tête posant problème.

À ce stade, j’ai peu d’intérêt à discuter/défendre les mérites de l’exemple, mais je vais le laisser, car il illustre certaines nuances dans le processus de compilation et la raison pour laquelle elles entraînent des erreurs.

END EDIT

Vous devez #include Le stdint.h AVANT #include Toute autre interface de bibliothèque qui en a besoin.

Exemple:

Ma bibliothèque LCD utilise les types uint8_t. J'ai écrit ma bibliothèque avec une interface (Display.h) Et une implémentation (Display.c)

Dans display.c, j'ai les inclus suivants.

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

Et ça marche.

Cependant, si je les réorganise comme suit:

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

Je reçois l'erreur que vous décrivez. En effet, Display.h A besoin d'éléments de stdint.h, Mais ne peut y accéder car ces informations sont compilées APRÈS que Display.h soit compilé.

Alors déplacez stdint.h Au-dessus de toute bibliothèque qui en a besoin et vous ne devriez plus avoir l'erreur.

5
LanchPad