Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
Voici un exemple d'un morceau 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 très bien. Comment empêcher Eclipse de se plaindre de ce genre d'erreurs?
c++
eclipse
c++11
eclipse-cdt
pseudo
la source
la source
std::unique_ptr<char[]>
unique_ptr<char>
appeldelete
, ce qui est faux car il a été créé avecnew[]
?delete
l'appel, lorsque vous en aurez besoindelete[]
. Leunique_ptr<char>
suppose qu'il obtient un pointeur, qui est supprimé avecdelete
.unique_ptr<char[]>
attend un tableau, qui est supprimé avecdelete[]
correctement.Réponses:
J'ai trouvé cet article sur le forum Eclipse, j'ai simplement suivi ces étapes et cela fonctionne pour moi. J'utilise Eclipse Indigo 20110615-0604 sous Windows avec une configuration Cygwin.
-std=c++0x
(ou pour une version plus récente du compilateur-std=c++11
à la fin. ... au lieu du compilateur C ++ GCC, j'ai aussi le compilateur Cygwin__GXX_EXPERIMENTAL_CXX0X__
(assurez-vous d'ajouter et de préfixer deux traits de soulignement) dans "Nom" et laissez "Valeur" vide.Il y a maintenant une description de cela dans la FAQ Eclipse : Fonctionnalités Eclipse FAQ / C ++ 11 .
Réglage de l'image Eclipse
la source
&&
.Instruction pour Eclipse CDT 4.4 Luna et 4.5 Mars
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
ajouter-std=c++11
Vous pouvez maintenant 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éeother dialect flags
ou sélectionnezISO C++11
dans leLanguage standard
menu déroulant.Pour le projet CMake
Générez des fichiers de projet Eclipse (à l'intérieur de votre projet)
Importez ensuite le répertoire généré dans eclipse en tant que projet d'éclipse standard. Cliquez avec le bouton droit sur le projet et ouvrez
Properties
->C/C++ General
->Preprocessor Include Paths, Marcos etc.
->Providers
l'activer
CDT GCC Build-in Compiler Settings
et le déplacer plus haut queContributed PathEntry Containers
(c'est important)Dernière étape commune
recompiler, régénérer
Project
->C/C++ Index
et redémarrer Eclipse.la source
-std=c++11
étaitProject Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:
. Ajoutez votre-std=c++11
à cela. Je l'avais défini dans les paramètres globaux de l'espace de travail comme suggérant, mais il n'a pas été copié à l'emplacement que je décris ci-dessus lorsque j'ai créé un nouveauMakefile
projet.Mise à jour 2016:
Depuis gcc 6 ( modifications ), 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 que, vous n'avez plus besoin de faire quoi que ce soit avec Eclipse.
Pour Luna et Mars
Cette section wiki communautaire incorpore la réponse de Trismegistos;
1. Avant de créer un projet, configurez l'analyseur syntaxique Eclipse:
Fenêtre -> Préférences -> C / C ++ -> Build -> Settings -> Discovery -> CDT GCC Build-in Compiler Settings
dans la zone de texte intitulée Commande pour obtenir l'ajout des spécifications du compilateur
-std=c++14
2. Créez 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 -> C / C ++ Build -> Paramètres -> Paramètres de l'outil -> GCC C ++ Compiler -> Dialect
Mettez
-std=c++14
dans la zone de texte intitulée autres drapeaux dialectes ou sélectionnez ISO C ++ 11 dans la liste déroulante Standard de langue.Il existe maintenant une nouvelle façon de résoudre ce problème sans le hack GXX_EXPERIMENTAL.
Pour les versions les plus récentes : (actuellement
Juno et KeplerLuna ):Sous les versions plus récentes de Juno, les paramètres se trouvent à
Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.Versions antérieures 2012/2013:
Sous C / C ++ Build (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 Partager les entrées des paramètres…. Ajoutez l'option -std = c ++ 11 à la zone de texte appelée Commande pour obtenir les spécifications du compilateur.
Allez aux chemins et aux symboles. Sous Symboles, cliquez sur restaurer les valeurs 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
de https://stackoverflow.com/a/13635080/1149664la source
#ifndef __GXX_EXPERIMENTAL_CXX0X__
renvoie true et le code ci-dessous n'est pas analysé. Lorsque j'ajoute__GXX_EXPERIMENTAL_CXX0X__
aux symboles du projet, le tableau est résolu mais les références de mon projet sont gâchées. Quel pourrait être le problème ici?Pour le dernier cdt (Juno) eclipse, les éléments suivants ont fonctionné pour moi, pas besoin de
__GXX_EXPERIMENTAL_CXX0X__
me déclarer moi-même. Cela fonctionne pour l'indexeur CDT et comme paramètre pour le compilateur:"le nom de votre projet" -> clic droit -> propriétés:
C / C ++ General -> Preprocessor Include Paths, Macros etc. -> passez à l'onglet nommé "Providers":
pour "Configuration" sélectionnez "Release" (et ensuite "debug")
désactivez tous les fournisseurs et sélectionnez simplement "Paramètres du compilateur intégré CDT GCC"
décochez "Partager les entrées de paramètres entre les projets (fournisseur global)"
dans la "Commande pour obtenir les spécifications du compilateur:" ajouter "-std = c ++ 11" sans les guillemets (peut aussi fonctionner avec des guillemets)
appuyez sur appliquer et fermer les options
reconstruire l'index
Maintenant, toutes les choses liées à C ++ 11 doivent être résolues correctement par l'indexeur.
win7 x64, dernière éclipse officielle avec cdt mingw-w64 gcc 4.7.2 du projet mingwbuilds sur sourceforge
la source
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]
.la source
Pour Eclipse CDT Kepler, ce qui a fonctionné pour moi pour me débarrasser des
std::thread
symboles non résolus est:Allez dans Préférences-> C / C ++ -> Build-> 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 au champ "Commande pour obtenir les spécifications du compilateur:" tel que:
L'ajout
-std=c++11
au projetProperties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other
Flags n'était pas suffisant pour Kepler, mais c'était suffisant pour les anciennes versions telles que Helios.la source
Je ne peux pas encore commenter alors j'écris ma propre réponse:
Il est lié
__GXX_EXPERIMENTAL_CXX0X__
et valide 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 qu'elle soit cohérente.
Pour permettre de construire en utilisant 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
etProject properties
ouALT + ENTER
. Puis C / C ++ Build -> Settings -> Tool Settings -> GCC C ++ Compiler -> Miscellaneous -> Other Flags. Mettez std = c ++ 11 à la fin de la ligne, pour GCC il ressemblera à :-c -fmessage-length=0 -std=c++11
. En ajoutant -stdc ++ 11, le compilateur de drapeaux (GCC) se déclarera__GXX_EXPERIMENTAL_CXX0X__
par lui-même.À ce stade, vous pouvez créer un projet en utilisant toutes les qualités de C ++ 11.
Le problème est qu'Eclipse a son propre analyseur pour vérifier les erreurs - c'est pourquoi vous obtenez toujours toutes les erreurs désagréables dans l'éditeur Eclipse, tandis qu'en même temps, vous pouvez créer et exécuter un projet sans aucune. Il existe un moyen de résoudre ce problème en déclarant explicitement un
__GXX_EXPERIMENTAL_CXX0X__
indicateur pour le projet, on peut le faire (comme Carsten Greiner l'a dit): C / C ++ General -> Chemins et symboles -> Symboles -> GNU C ++. Cliquez sur "Ajouter ..." et passé__GXX_EXPERIMENTAL_CXX0X__
(assurez-vous d'ajouter et de préfixer deux traits de soulignement) dans "Nom" et laissez "Valeur" vide. Et maintenant, c'est la partie supplémentaire que je voulais couvrir en commentaire de la première réponse, allez à: Général C / C ++ -> Préprocesseur Inclure les macros de chemin, etc. -> Fournisseurs et sélectionnezCDT Managed Build Setting Entries
puis cliquez sur APPLIQUER et revenez à l'onglet Entrées, sous GNU C ++, il devrait maintenant y avoir des entrées de paramètres de construction gérée CDT vérifier si l'intérieur est défini__GXX_EXPERIMENTAL_CXX0X__
si c'est -> APPLIQUER et reconstruire l'index, vous devriez être bien à ce stade.la source
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 en plus j'ai eu des problèmes avec
dans le cadre de c ++ 11 (l'ajout de -pthread pour l'éditeur de liens résout ce problème). Quoi qu'il en soit, ces paramètres ont finalement bien fonctionné:
Projet -> Propriétés -> Build C / C ++ -> Paramètres -> Divers. Ajouter le
indicateur pour les compilateurs GCC et G ++. Cliquez sur Appliquer.
Pour l'éditeur de liens, même fenêtre, Divers, Indicateurs de l'éditeur de liens, a ajouté le
drapeau. Paramètres de bibliothèque partagée, nom d'objet partagé, ajoutez le
drapeau aussi. Cliquez sur Appliquer.
C / C ++ Général -> Chemins et symboles -> Symboles TAB, GNU C ++ sélectionné, Ajouter le
(aucune valeur)
drapeau. Cliquez sur Appliquer.
C / C ++ Général -> Préprocesseur Inclure les chemins .. -> Onglet Fournisseurs: vérifier
Paramètres du compilateur intégré CDT GCC
et pour "Commande pour obtenir les spécifications du compilateur", ajoutez le
drapeau. Décochez Partager. Cliquez sur Appliquer.
CDT gère les entrées des paramètres de génération, vérifiez également cela. Décochez les deux autres. Cliquez sur Appliquer.
Pour en revenir à l'onglet Entrées, GNU C ++ CDT gère les entrées de paramètres de construction, vous devriez maintenant voir votre ajouté
entrée.
C'est tout. Lors du codage, de la frappe
peut maintenant compléter automatiquement la classe de threads par exemple, les versions devraient fonctionner correctement et il ne devrait pas y avoir
lors de l'exécution.
la source
Project -> Properties -> C/C++ Build -> Settings -> Miscellaneous
étape qui a fonctionné pour moi. Merci beaucoup: DJe ne sais pas si c'est seulement moi, la solution la mieux classée ne fonctionne pas pour moi, ma version eclipse est juste une plateforme eclipse normale installée en utilisant sudo apt-get install eclipse dans Ubuntu Mais j'ai trouvé une solution qui adopte la méthode ensemble à la fois de la solution la mieux classée et de la seconde, ce que j'ai fait pour le faire fonctionner est décrit ci-dessous (Notez que les autres étapes comme la création d'un projet C ++, etc. sont ignorées pour plus 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 d'ajouter deux traits de soulignement) dans "Nom" et laissez "Valeur" vide.
(2) Sous C / C ++ Build (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 Partager les entrées des paramètres…. Ajoutez l'option -std = c ++ 11 à la zone de texte appelée Commande pour obtenir les spécifications du compilateur
Après avoir effectué plus de 2 et 2 étapes seulement, cela fonctionne, l'éclipse est capable de résoudre l'unique_ptr, je ne sais pas pourquoi cette solution fonctionne, j'espère qu'elle peut aider les gens.
la source
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 utilisez le compilateur GNU C ++, voici ce que j'ai fait pour corriger:
Projet -> Propriétés -> Général C / C ++ -> Chemins d'inclusion du préprocesseur -> GNU C ++ -> Entrées des paramètres utilisateur CDT
Cliquez sur le bouton "Ajouter ..."
Sélectionnez "Macro préprocesseur" dans le menu déroulant
Appuyez sur Appliquer, puis sur OK pour revenir à votre projet
Reconstruisez ensuite votre index C ++: Projets -> Index C / C ++ -> Reconstruire
la source
Pour moi sur Eclipse Neon, j'ai suivi la réponse de Trismegistos ci-dessus , mais j'ai également ajouté une étape supplémentaire:
Appuyez sur Appliquer et OK.
À votre santé,
Gars.
la source
la source
Ni le hack ni la version plus propre ne fonctionnent pour Indigo. Le hack est ignoré et les options de configuration requises sont manquantes. Pour aucune raison apparente, la build a commencé à fonctionner après ne pas avoir fonctionné et sans fournir de raison utile. Au moins depuis la ligne de commande, j'obtiens des résultats reproductibles.
la source
Pour obtenir la prise en charge de C ++ 14 dans Eclipse Luna, vous pouvez effectuer ces étapes:
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.
la source
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 des inclus dans / usr / local / include.
J'ai gravé le CD dans / usr / local / bin et créé un lien symbolique à partir de g ++ @ 7, ce qui ne fait que g ++ car ce bit @ est ennuyeux.
Ensuite, je suis allé dans MyProject -> Propriétés -> C / C ++ Build -> Paramètres -> GCC C ++ Compiler et j'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, cela a montré un nombre impressionnant d'erreurs, mais je pense que c'était lors de la construction d'index. Pendant que je découvrais les erreurs, elles ont toutes disparu sans autre action.
Je pense que sans vérifier que vous pouvez également aller dans Eclipse -> Propriétés -> C / C ++ -> Core Build Toolchains et les modifier avec des chemins différents, mais je ne suis pas sûr de ce que cela fera.
la source
J'ai eu un problème similaire en utilisant Eclipse C ++ 2019-03 pour un projet mixte C et C ++ qui utilisait std :: optional et std :: swap. Ce qui a fonctionné pour moi, c'est ça. Dans le projet Properties-> C / C ++ Build-> Settings-> Tool Settings-> Cross G ++ Compiler, supprimez -std = gnu ++ 17 de Miscellaneous et placez-le à la place dans Dialect-> Other Dialect Flags.
la source
Lorsque j'utilise un compilateur croisé, j'obtiens souvent des systèmes de construction personnalisés avancés méticuleusement conçus par des collègues. J'utilise "Makefile Project with Existing code", donc la plupart des autres réponses ne sont pas applicables.
Au début du projet, je dois spécifier que j'utilise un compilateur croisé dans l'assistant pour "Makefile Project with Existing Code". Ce qui est ennuyeux, c'est qu'au cours des 10 dernières années, le bouton du compilateur croisé de cet assistant ne demande pas où se trouve le compilateur croisé. Donc, dans une étape qui résout le problème C ++ et le problème du compilateur croisé, je dois aller dans l'onglet des fournisseurs comme mentionné par des réponses comme @ravwojdyla ci-dessus, mais le fournisseur que je dois sélectionner est le fournisseur du compilateur croisé. Ensuite, dans la boîte de commande, je mets le chemin complet vers le compilateur et j'ajoute -std = gnu ++ 11 pour la norme C ++ pour laquelle je veux avoir le support. Cela fonctionne aussi bien que prévu.
Vous pouvez le faire pour un projet existant. La seule chose que vous pourriez avoir à faire est de réexécuter l'indexeur.
Je n'ai jamais eu à ajouter le drapeau expérimental ou remplacer la définition de __cplusplus. La seule chose est, si j'ai une quantité substantielle de code C moderne, je n'ai nulle part où mettre l'option standard spécifique à C.
Et lorsque les choses vont vraiment mal, obtenir un journal d'analyse, en utilisant cette commande dans le sous-menu Indexer, peut être très instructif.
la source