92 votes

uint32_t' n'est pas un type.

J'essaie de compiler un logiciel C++ qui a été écrit en 2007 et j'obtiens cette erreur :

error: ‘uint32_t’ does not name a type

Cela se produit sur Ubuntu 64 bits avec g++ 4.5.2. Il se compile bien sur CentOS 64 bits avec g++ 4.1.2.

Y a-t-il un #include ou un drapeau de compilateur qui m'échappe ? Ou, devrais-je utiliser typedef d'attribuer uint32_t à un size_t ou peut-être un unsigned int ?

173voto

selbie Points 20267

Vous devez inclure stdint.h

 #include <stdint.h>

36voto

plasma Points 513

Vous devez #include <cstdint> mais cela ne fonctionne pas toujours.

Le problème est que certains compilateurs exportent souvent automatiquement les noms définis dans divers en-têtes ou types fournis avant que de telles normes ne soient en place.

Maintenant, j'ai dit "peut ne pas toujours fonctionner". C'est parce que l'en-tête cstdint fait partie de la norme C++11 et n'est pas toujours disponible sur les compilateurs C++ actuels (mais l'est souvent). L'en-tête stdint.h est l'équivalent en C et fait partie de C99.

Pour une meilleure portabilité, je recommanderais d'utiliser l'outil Boost's boost/cstdint.hpp tête, si vous êtes prêt à utiliser le boost. Sinon, vous pourrez probablement vous en sortir avec #include'ing <cstdint> .

10voto

patti_jane Points 28

J'ai également rencontré le même problème sur Mac OSX 10.6.8 et malheureusement en ajoutant #include <stdint.h> ou <cstdint.h> au fichier correspondant n'a pas résolu mon problème. Cependant, après plus de recherche, j'ai trouvé cette solution conseillant d'ajouter #include <sys/types.h> ce qui a bien fonctionné pour moi !

6voto

Daniel Lemire Points 812

Les autres réponses supposent que votre compilateur est conforme à la norme C++11. C'est très bien s'il l'est. Mais que se passe-t-il si vous utilisez un compilateur plus ancien ?

J'ai récupéré le hack suivant quelque part sur le net. Il fonctionne assez bien pour moi :

  #if defined __UINT32_MAX__ or UINT32_MAX
  #include <inttypes.h>
  #else
  typedef unsigned char uint8_t;
  typedef unsigned short uint16_t;
  typedef unsigned long uint32_t;
  typedef unsigned long long uint64_t;
  #endif

Il n'est pas portable, bien sûr. Mais il pourrait fonctionner pour votre compilateur.

2voto

user3094631 Points 131

Si c'est arrivé quand vous avez inclus l'en-tête opencv.

Je recommanderais de changer l'ordre des en-têtes.

mettre les en-têtes opencv juste en dessous de l'en-tête standard C++.

comme ça :

#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X