Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
Voici un exemple de code C++ 11:
auto text = std::unique_ptr<char[]>(new char[len]);
L'éditeur Eclipse se plaint de:
Function 'unique_ptr' could not be resolved
La compilation Makefile fonctionne bien. Comment faire en sorte qu'Eclipse cesse de se plaindre de ce type d'erreur?
J'ai trouvé this article sur le forum Eclipse, je viens de suivre ces étapes et cela fonctionne pour moi. J'utilise Eclipse Indigo 20110615-0604 sur Windows avec une configuration Cygwin.
-std=c++0x
(ou pour la version la plus récente du compilateur -std=c++11
à la fin. ... au lieu du compilateur GCC C++, j'ai aussi le compilateur Cygwin__GXX_EXPERIMENTAL_CXX0X__
(assurez-vous d'ajouter et de précéder deux traits de soulignement) dans "Nom" et laissez "Valeur" vide.Eclipse FAQ en contient une description: FAQ Eclipse/C++ 11 .
Tout d'abord, avant de créer un projet, configurez l'analyseur syntaxique Eclipse:
Window
-> Preferences
-> C/C++
-> Build
-> Settings
-> Discovery
-> CDT GCC Build-in Compiler Settings
dans la zone de texte intitulée Command to get compiler specs
append -std=c++11
Maintenant, vous pouvez créer un projet, la configuration dépend du type de projet que vous avez créé:
Pour le projet créé en tant que: Fichier -> Nouveau -> Projet -> C/C++ -> Projet C++
Faites un clic droit sur le projet créé et ouvrez
Properties
-> C/C++ Build
-> Settings
-> Tool Settings
-> GCC C++ Compiler
-> Dialect
Mettez -std=c++11
dans la zone de texte intitulée other dialect flags
ou sélectionnez ISO C++11
dans la liste déroulante Language standard
.
Pour le projet CMake
Générez des fichiers de projet Eclipse (dans votre projet)
mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..
Importez ensuite le répertoire généré dans Eclipse en tant que projet Eclipse standard. Faites un clic droit sur le projet et ouvrez
Properties
-> C/C++ General
-> Preprocessor Include Paths, Marcos etc.
-> Providers
activez CDT GCC Build-in Compiler Settings
et déplacez-le au-dessus de Contributed PathEntry Containers
(c'est important)
Dernière étape commune
recompilez, régénérez Project
-> C/C++ Index
et redémarrez Eclipse.
Mise à jour 2016:
A partir de gcc 6 ( changes ), le dialecte C++ par défaut est C++ 14. Cela signifie qu'à moins d'avoir explicitement besoin d'un dialecte plus récent ou plus ancien, vous n'avez plus besoin de faire quoi que ce soit avec Eclipse.
Cette section wiki de la communauté intègre la réponse de Trismegistos;
1. Avant de créer un projet, configurez l'analyseur syntaxique Eclipse:
Fenêtre -> Préférences -> C/C++ -> Construire -> Paramètres -> Découverte -> Paramètres du compilateur intégré CDT GCC
dans la zone de texte intitulée Commande pour obtenir les spécifications du compilateur, ajoutez -std=c++14
2. Créer un projet, la configuration dépend du type de projet que vous avez créé:
Pour le projet créé en tant que: Fichier -> Nouveau -> Projet -> C/C++ -> Projet C++
Faites un clic droit sur le projet créé et ouvrez
Propriétés -> Génération C/C++ -> Paramètres -> Paramètres d'outil -> Compilateur GCC C++ -> Dialecte
Placez -std=c++14
dans la zone de texte intitulée autres drapeaux de dialecte ou sélectionnez ISO C++ 11 dans la liste déroulante Norme de langue.
Pour les versions les plus récentes: (Actuellement Juno et Kepler Luna):
Dans les nouvelles versions de Juno, les paramètres sont situés à Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.
Anciennes versions 2012/2013:
Sous Génération C/C++ (dans les paramètres du projet), recherchez le chemin du préprocesseur inclure et accédez à l'onglet Fournisseurs. Désélectionnez tout sauf les paramètres du compilateur intégré CDT GCC. Désélectionnez ensuite les entrées de paramètres de partage…. Ajoutez l'option -std = c ++ 11 dans la zone de texte appelée Commande pour obtenir les spécifications du compilateur.
Aller aux chemins et aux symboles. Sous Symboles, cliquez sur restaurer les paramètres par défaut, puis appliquez.
Remarques:
Eclipse est difficile à appliquer, vous devez le faire chaque fois que vous quittez un onglet de paramètres.
[Auto-promotion]: J'ai écrit mes propres instructions plus détaillées basées sur ce qui précède. http://scrupulousabstractions.tumblr.com/post/36441490955/Eclipse-mingw-builds
Merci à l'utilisateur Nobody
à https://stackoverflow.com/a/13635080/1149664
Pour le dernier (Juno) Eclipse cdt, ce qui suit a fonctionné pour moi, pas besoin de déclarer __GXX_EXPERIMENTAL_CXX0X__
sur moi-même. Cela fonctionne pour l'indexeur CDT et comme paramètre pour le compilateur:
"nom de votre projet" -> clic droit -> propriétés:
C/C++ Général -> Chemins d'inclusion du préprocesseur, macros, etc. -> Basculez vers l'onglet nommé "Fournisseurs":
pour "Configuration", sélectionnez "Release" (et ensuite "debug")
éteignez tous les fournisseurs et sélectionnez simplement "Paramètres du compilateur intégré CDT GCC"
décochez "Partager les entrées de réglage entre les projets (fournisseur global)"
dans la "Commande pour obtenir les spécifications du compilateur:" add "-std = c ++ 11" sans les guillemets (peut également fonctionner avec des guillemets)
appuyez sur Appliquer et fermez les options
reconstruire l'index
Maintenant, tous les problèmes liés à c ++ 11 doivent être résolus correctement par l'indexeur.
win7 x64, dernière version officielle d'Eclipse avec cdt mingw-w64 gcc 4.7.2 du projet mingwbuilds sur sourceforge
J'ai eu le même problème sur mon Eclipse Juno. Ces étapes ont résolu le problème:
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
. Pour Eclipse CDT Kepler, ce qui a fonctionné pour moi de supprimer le symbole std::thread
non résolu est le suivant:
Allez dans Préférences-> C/C++ -> Construire-> Paramètres
Sélectionnez l'onglet Découverte
Sélectionnez les paramètres du compilateur intégré CDT GCC [Partagé]
Ajoutez le -std = c ++ 11 à la commande "pour obtenir les spécifications du compilateur:" telles que:
$ {COMMAND} -E -P -v -dD -std = c ++ 11 $ {INPUTS}
L'ajout de -std=c++11
au projet Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other
Les drapeaux ne suffisaient pas pour Kepler, mais suffisaient pour les versions plus anciennes telles que Helios.
Je ne peux pas encore commenter alors j'écris ma propre réponse:
Ceci est lié à __GXX_EXPERIMENTAL_CXX0X__
et est valable pour Eclipse Juno et CDT 8.x.
Certaines parties de cette réponse sont déjà couvertes dans d'autres réponses mais je veux que ce soit cohérent.
Pour rendre possible la construction avec stdc ++ 11, il faut ajouter un drapeau spécifique pour le compilateur. Vous pouvez le faire via les propriétés du projet. Pour modifier les propriétés du projet RMB
andProject properties
ou ALT + ENTER
. Puis C/C++ Build -> Paramètres -> Paramètres d’outil -> Compilateur GCC C++ -> Divers -> Autres drapeaux. Mettez -std = c ++ 11 en fin de ligne, pour GCC, cela ressemblera à: -c -fmessage-length=0 -std=c++11
. En ajoutant -stdc ++ 11, le compilateur d'indicateurs (GCC) déclarera __GXX_EXPERIMENTAL_CXX0X__
lui-même.
À ce stade, vous pouvez construire un projet en utilisant toute la qualité de C++ 11.
Le problème, c’est que Eclipse dispose de son propre analyseur pour vérifier les erreurs. C’est pourquoi vous obtenez toujours toutes les mauvaises erreurs dans l’éditeur Eclipse, tout en permettant de construire et d’exécuter un projet sans aucune erreur. Il existe un moyen de résoudre ce problème en déclarant explicitement le drapeau __GXX_EXPERIMENTAL_CXX0X__
pour le projet. On peut le faire (tout comme l’a dit Carsten Greiner): C/C++ Général -> Chemins et symboles -> Symboles -> GNU C++. Cliquez sur "Ajouter ..." et sur __GXX_EXPERIMENTAL_CXX0X__
passé (assurez-vous d'ajouter et de préfixer deux traits de soulignement) dans "Nom" et laissez "Valeur" vide. Et voici maintenant la partie supplémentaire que je voulais couvrir dans le commentaire de la première réponse, allez à: C/C++ Général -> Macros de chemin d'inclusion de préprocesseur, etc. -> Fournisseurs, et sélectionnez CDT Managed Build Setting Entries
puis cliquez sur APPLIQUER et allez De retour à l'onglet Entrées, sous GNU C++, il devrait maintenant y avoir des entrées de paramètres de construction gérés par CDT. Si à l'intérieur, il y a __GXX_EXPERIMENTAL_CXX0X__
s'il est -> APPLY et l'index de reconstruction, tout devrait bien se passer.
J'ai également eu plusieurs problèmes (Ubuntu 13.04 64 bits, g ++ - 4.8, Eclipse Juno 3.8.1, CDT 6.0.0). Beaucoup de choses sont mentionnées ci-dessus, désolé de les répéter, mais j’ai eu des problèmes pour utiliser
std::thread
dans le cadre de c ++ 11 (l'ajout de -pthread pour l'éditeur de liens résout ce problème). Enfin, ces réglages ont finalement fonctionné correctement:
Projet -> Propriétés -> Génération C/C++ -> Paramètres -> Divers. Ajouter le
-std=c++11
indicateur pour les compilateurs GCC et G ++. Cliquez sur Appliquer.
Pour l’éditeur de liens, même fenêtre, Divers, indicateurs d’éditeur de liens, ajout de la
-pthread
drapeau. Paramètres de la bibliothèque partagée, Nom de l'objet partagé, ajoutez le
-Wl,--no-as-needed
drapeau aussi. Cliquez sur Appliquer.
Général C/C++ -> Chemins et symboles -> Onglet Symboles, GNU sélectionné par C++, ajoutez le
__GXX_EXPERIMENTAL_CXX0X__
(aucune valeur)
drapeau. Cliquez sur Appliquer.
C/C++ Général -> Chemins d'inclusion du préprocesseur .. -> Onglet Fournisseurs: cochez
Paramètres du compilateur intégré CDT GCC
et pour "Commande pour obtenir les spécifications du compilateur", ajoutez le
-std=c++11
drapeau. Décochez Partager. Cliquez sur Appliquer.
CDT gère les entrées de paramètres de construction, cochez cette case également. Décocher les deux autres. Cliquez sur Appliquer.
Pour revenir à l'onglet Entrées, GNU C++ CDT gère les entrées de paramètres de construction, vous devriez maintenant voir votre
__GXX_EXPERIMENTAL_CXX0X__
entrée.
C'est tout. En codant, en tapant
std::
peut maintenant auto-compléter la classe de thread par exemple, les constructions devraient fonctionner correctement et il ne devrait y avoir aucune
std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted
à l'exécution.
Je ne sais pas si c'est seulement moi, la solution la mieux classée ne fonctionne pas pour moi, ma version d'Eclipse est simplement la plate-forme Eclipse normale installée à l'aide de Sudo apt-get install Eclipse dans Ubuntu Mais j'ai trouvé une solution qui adopte la méthode à la fois de la solution la mieux classée et de la seconde, ce que j’ai fait pour que cela fonctionne est décrit ci-dessous (Notez que les autres étapes telles que la création d’un projet C++, etc., sont ignorées pour des raisons de simplicité).
Une fois que vous avez créé le projet C++
(1) C/C++ Général -> Chemins et symboles -> Symboles -> GNU C++. Cliquez sur "Ajouter ..." et collez GXX_EXPERIMENTAL_CXX0X (assurez-vous d'ajouter et de préfixer deux traits de soulignement) dans "Nom" et laissez "Valeur" vide.
(2) Sous Génération C/C++ (dans les paramètres du projet), recherchez le chemin d'inclusion du préprocesseur et accédez à l'onglet Fournisseurs. Désélectionnez tout sauf les paramètres du compilateur intégré CDT GCC. Désélectionnez ensuite les entrées de paramètres de partage…. Ajoutez l'option -std = c ++ 11 à la zone de texte appelée Commande pour obtenir les spécifications du compilateur
Après avoir effectué les étapes ci-dessus 2 et 2 seulement, cela fonctionne, Eclipse est capable de résoudre unique_ptr, je ne sais pas pourquoi cette solution fonctionne, j'espère qu'elle pourra aider les gens.
Eclipse C/C++ ne reconnaît pas le symbole std::unique_ptr
même si vous avez inclus l'en-tête de mémoire C++ 11 dans votre fichier.
En supposant que vous utilisiez le compilateur GNU C++, voici ce que j'ai fait pour résoudre ce problème:
Projet -> Propriétés -> Général C/C++ -> Chemins d'inclusion de préprocesseur -> GNU C++ -> Entrées de paramètres utilisateur CDT
Cliquez sur le bouton "Ajouter ..."
Sélectionnez "Macro de préprocesseur" dans le menu déroulant.
Name: __cplusplus Value: 201103L
Appuyez sur Appliquer, puis sur OK pour revenir à votre projet.
Puis reconstruisez votre index C++: Projets -> Index C/C++ -> Reconstruire
Pour moi sur Eclipse Neon j'ai suivi Trismegistos répondre ci-dessus , ENCORE, j'ai également ajouté une étape supplémentaire:
Cliquez sur Appliquer et sur OK.
À votre santé,
Gars.
Pour obtenir une assistance pour C++ 14 dans Eclipse Luna, procédez comme suit:
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
, ajoutez "-std = c ++ 14"C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous
, ajoutez "-std = c ++ 14"Réindexez votre projet et redémarrez éventuellement Eclipse. Cela devrait fonctionner comme prévu.
Ni le hack ni la version plus propre ne fonctionnent pour Indigo. Le hack est ignoré et les options de configuration requises sont manquantes. Sans aucune raison apparente, la construction a commencé à fonctionner après avoir échoué et sans fournir de raison utile. Au moins depuis la ligne de commande, j'obtiens des résultats reproductibles.
J'ai eu un problème similaire lors de l'utilisation d'Eclipse C++ 2019-03 pour un projet mixte C et C++ utilisant std :: optional et std :: swap. Ce qui a fonctionné pour moi était ceci. Dans le projet Propriétés-> C/C++ Édition-> Paramètres-> Paramètres d'outil-> Compilateur Cross G ++, supprimez -std = gnu ++ 17 de la catégorie Divers et placez-le dans Dialect-> Autres drapeaux de dialecte.
Je l'ai résolu de cette façon sur un Mac. J'ai utilisé Homebrew pour installer la dernière version de gcc/g ++. Ils atterrissent dans/usr/local/bin avec includes dans/usr/local/include.
J'ai gravé un CD dans/usr/local/bin et créé un lien symbolique de g ++ @ 7qu’il n’existait plus que de simplement g ++ car ce @ bit était gênant.
Ensuite, je suis allé dans MyProject -> Propriétés -> Construction C/C++ -> Paramètres -> Compilateur GCC C++ et ai changé la commande de "g ++" en "/ usr/local/bin/g ++". Si vous décidez de ne pas faire le lien symbolique, vous pouvez être plus précis.
Faites la même chose pour l'éditeur de liens.
Appliquer et Appliquer et Fermer. Laissez-le reconstruire l'index. Pendant un certain temps, il y avait un nombre impressionnant d’erreurs, mais je pense que c’était en construisant des index. Pendant que je découvrais les erreurs, elles ont toutes disparu sans autre action.
Je pense sans vérifier que vous pouvez également accéder à Eclipse -> Propriétés -> C/C++ -> Chaînes de construction de base et les éditer avec des chemins différents, mais je ne suis pas sûr de ce que cela va faire.