Type 'uint32_t' n'a pas pu être résolu
Je travaille sur un programme en C++ sous Eclipse (3.8.1) CDT. Je suis en utilisant le compilateur gcc sur Debian 8. Je suis également en utilisant une bibliothèque open source appelé opendnp3 écrit en C++, ce qui nécessite uint32_t à résoudre, car c'est un paramètre dans plusieurs appels de méthode et les constructeurs.
Dans le opendnp objets, intellisense ne marche pas liste
__uint32_t
cependant, NE résout.
Le type est défini dans <cstdint>
(<cstdint>
résout très bien). Je peux ouvrir la déclaration et clairement voir " using ::uint32_t;
dans le.
Dans mes recherches, j'ai ajouté -std=c++11
à "Toutes les options "sous" C/C++ Build --> Paramètres -> Paramètres de l'Outil -> GCC Compilateur C++ " et j'ai également reconstruit l'index du projet et le redémarrage d'Eclipse, mais il n'est toujours pas résolu.
Voici le code pour l'instant: Édités pour une simple HelloWorld projet pour aider à diagnostiquer le problème
#include <iostream>
#include <cstdint> //has uint32_t defined
using namespace std;
int main() {
__uint32_t t = 0; //resolves just fine
uint32_t i = 0; //Type could not be resolved
auto x = "123"; //C++ 11 working
cout << "Foo!" << endl; //prints Foo!
return 0;
}
CDT Console après une tentative d'empaquetage:
23:10:52 **** Différentiels de construction de la configuration de Débogage pour le projet FOO ****
faire tous les
faire: Rien à faire pour "all".
23:10:52 Bâtir Fini (pris 133ms)
gcc -v
.Est que cela provoque une erreur de compilation ou tout simplement l'INTERFACE utilisateur d'Eclipse est une erreur de marquage?
Essayez
std::uint32_t
. Il y a sans doute plus d'une xxx::uint32_t
dans ce déluge de using namespace yyy;
, ce qui rend le nom ambigu.Essayez de déplacer #include <cstdint> //uint32_t à la première ligne. Comment opendnp3 se réfère à uint32_t ?
Le temps de couper vers le bas le problème. si
#include <iostream> #include <cstdint> int main() { uint32_t test =0; std::cout << test << std::endl; }
ne pas reproduire le problème, @BaummitAugen est sans doute vrai.
OriginalL'auteur ErikJL | 2016-05-26
Vous devez vous connecter pour publier un commentaire.
Je sais que cette question est ancienne, mais je pense qu'il vaut la peine de mentionner que j'ai eu exactement ce problème et a pu le résoudre simplement être la reconstruction de l'index: cliquez-droit sur le projet, "Index", "Reconstruire". Vous avez dit que vous avait reconstruit l'index et il n'a pas aidé; surtout, je l'ai fait après l'ajout de
-std=c++11
à la ligne de commande du compilateur spécifié dans le "CDT GCC Compilateur Intégré Paramètres", qui peut être trouvé par l'ouverture de propriétés du projet et d'aller à "C/C++ Générale", "Préprocesseur Inclure des Chemins d'accès, les Macros, etc", "Fournisseurs" de l'onglet. Vous ne serait pas, si je comprends bien, besoin de faire cela avec la version de GCC 6+ comme la valeur par défaut est C++14, je suis en utilisant GCC 5.4 moi-même.Si cela ne fonctionne pas, le meilleur chemin pour déboguer le problème est probablement pour ouvrir la déclaration de
cstdint
(inclure le fichier lui-même -, cliquez droitcstdint
dans le#include
directive, et choisissez "ouvrir déclaration") - cela va vous montrer le fichier inclus, avec des sections en grisé si elles sont exclues par les macros du préprocesseur (#ifdef
et autres). Vous pouvez être en mesure de voir tout de suite pourquoiuint32_t
n'est pas considéré comme définis. Dans mon cas, le__cplusplus
macro a un inadapté de la valeur et ce qui m'a conduit à l'ajout de-std=c++11
pour le compilateur de ligne de commande comme indiqué ci-dessus - mais j'ai encore besoin de reconstruire l'index avant de le problème a été entièrement résolu.OriginalL'auteur davmac
Essayez d'activer le CDT GCC Compilateur Intégré les Paramètres de dans Project>Propriétés>Préprocesseur Comprend>les Fournisseurs.
Corrigé mon problème. Merci!
OriginalL'auteur Laurenz
Après l'ajout de
-std=c++11
, faites ceci:Cliquez sur
Add
et collez GXX_EXPERIMENTAL_CXX0X (assurez-vous d'ajouter et ajouter deux traits de soulignement) dansName
et laisserValue
vide.OriginalL'auteur Sookhee Park