213 votes

Comment activer le support de C++11/C++0x dans Eclipse CDT ?

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

Ceci est un exemple d'un morceau de code C++11 :

auto text = std::unique_ptr(new char[len]);

L'éditeur Eclipse se plaint de :

La fonction 'unique_ptr' n'a pas pu être résolue

La compilation du Makefile fonctionne bien. Comment faire pour que Eclipse cesse de se plaindre de ce genre d'erreurs ?

12 votes

Au minimum, cela devrait être std::unique_ptr

0 votes

Pas sûr que ce soit correct - char[] est convertible en char* et unique_ptr est un pointeur vers char, comme char*

1 votes

Ne devrait pas unique_ptr appeler delete, ce qui est incorrect car il a été créé avec new[]?

228voto

Carsten Greiner Points 1499

J'ai trouvé cet article dans le forum Eclipse, j'ai suivi ces étapes et ça a fonctionné pour moi. J'utilise Eclipse Indigo 20110615-0604 sur Windows avec une configuration Cygwin.

  • Créer un nouveau projet C++
  • Options par défaut pour tout
  • Une fois créé, faites un clic droit sur le projet et allez dans "Propriétés"
  • C/C++ Build -> Réglages -> Paramètres d'outils -> Compilateur GCC C++ -> Divers -> Autres indicateurs. Mettez -std=c++0x (ou pour une version de compilateur plus récente -std=c++11 à la fin. ...au lieu de GCC C ++ Compiler, j'ai aussi le compilateur Cygwin
  • Général C/C++ -> Chemins et Symboles -> Symboles -> GNU C++. Cliquez sur "Ajouter ..." et collez __GXX_EXPERIMENTAL_CXX0X__ (assurez-vous d'ajouter deux tirets bas avant et après) dans "Nom" et laissez "Valeur" vide.
  • Cliquez sur Appliquer, faites ce qu'il vous demande de faire, puis sur OK.

Il y a maintenant une description de cela dans la FAQ Eclipse : FAQ Eclipse/Fonctionnalités C++11.

Paramètres Eclipse

Paramètres d'image Eclipse

0 votes

Je n'ai pas essayé cela, mais cela a du sens. Eclipse CDT utilise le scanner et le préprocesseur de gcc.

2 votes

Youpe, ça a marché! Mais, assurez-vous d'ajouter deux underscores avant et après GXX_EXPERIMENTAL_CXX0X -- Je vais accepter ça en attendant

5 votes

Est-ce que cela a supprimé les erreurs d'éditeur erronées? Je n'ai aucun problème avec la compilation, et les nouveaux types std sont reconnus, mais je ne peux pas me débarrasser des erreurs de syntaxe de l'éditeur pour les boucles for basées sur une plage et les références rvalue &&.

152voto

Trismegistos Points 746

Instruction pour Eclipse CDT 4.4 Luna et 4.5 Mars

Tout d'abord, avant de créer un projet, configurez le parseur de syntaxe Eclipse :

Fenêtre -> Préférences -> C/C++ -> Construction -> Paramètres -> Découverte -> Paramètres du compilateur CDT GCC intégré

dans la zone de texte intitulée Commande pour obtenir les spécifications du compilateur ajoutez -std=c++11

Maintenant vous pouvez créer un projet, la configuration dépend du type de projet que vous avez créé :

Pour un projet créé comme : Fichier -> Nouveau -> Projet -> C/C++ -> Projet C++

Cliquez avec le bouton droit sur le projet créé et ouvrez

Propriétés -> Construction C/C++ -> Paramètres -> Paramètres d'outils -> Compilateur GCC C++ -> Dialecte

Placez -std=c++11 dans la zone de texte intitulée autres indicateurs de dialecte ou sélectionnez ISO C++11 dans le menu déroulant Norme de langage.

Pour un projet CMake

Générez des fichiers de projet eclipse (à l'intérieur de votre projet)

mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..

Ensuite importez le répertoire généré dans Eclipse comme un projet Eclipse standard. Cliquez avec le bouton droit sur le projet et ouvrez

Propriétés -> Général C/C++ -> Chemin d'inclusion de préprocesseur, Macros etc. -> Fournisseurs

activez Paramètres du compilateur CDT GCC intégré et déplacez-le au-dessus de Conteneurs de chemin d'accès contribués (Ceci est important)

Dernière étape commune

recompilez, régénérez Projet ->Index C/C++ et redémarrez Eclipse.

1 votes

A parfaitement fonctionné même sans avoir besoin de redémarrer Eclipse. Merci.

0 votes

Merci. Aucune autre réponse n'a fonctionné pour moi sur Luna aussi.

0 votes

Fonctionne toujours sur Mars. Plus qu'une excellente réponse ! Si seulement je pouvais voter pour cette réponse deux fois !

112voto

Johan Lundberg Points 5835

Mise à jour 2016 :

À partir de gcc 6 (changements), le dialecte C++ par défaut est C++14. Cela signifie que, sauf si vous avez explicitement besoin d'un dialecte plus récent ou plus ancien, vous n'avez plus besoin de rien faire dans eclipse.

Pour Luna et Mars

Cette section wiki communautaire 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++ -> Build -> Paramètres -> Découverte -> Paramètres de compilation GCC CDT intégrés

dans la zone de texte 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 les projets créés comme suit : Fichier -> Nouveau -> Projet -> C/C++ -> Projet C++

Cliquez avec le bouton droit sur le projet créé et ouvrez

Propriétés -> Compilation C/C++ -> Paramètres -> Paramètres des outils -> Compilateur GCC C++ -> Dialecte

Placez -std=c++14 dans la zone de texte des autres drapeaux de dialectes ou sélectionnez ISO C++11 dans le menu déroulant du standard de langage.

Il y a maintenant une nouvelle façon de résoudre cela sans le hack GXX_EXPERIMENTAL.

Pour les versions les plus récentes : (Actuellement Juno et Kepler Luna):

Sous les nouvelles versions de Juno, les réglages se trouvent à Propriétés du projet -> Générales C/C++ -> Chemins d'inclusion préprocesseur, Macros, etc. -> onglet Fournisseurs -> Paramètres du compilateur GCC CDT intégré ().

Anciennes versions 2012/2013 :

  1. Sous Compilation C/C++ (dans les paramètres du projet), trouvez le Chemin d'inclusion préprocesseur et allez à l'onglet Fournisseurs. Désélectionnez tout sauf Paramètres du compilateur GCC CDT intégrés. Ensuite, décochez les entrées Partager les paramètres … . Ajoutez l'option -std=c++11 à la zone de texte appelée Commande pour obtenir les spécifications du compilateur.

  2. Allez dans Chemins et symboles. Sous Symboles, cliquez sur restaurer les paramètres par défaut, puis appliquez.


Remarques :

Eclipse est pointilleux sur l'application, 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 Personne sur https://stackoverflow.com/a/13635080/1149664

3 votes

Merci mais cela ne m'a pas aidé à résoudre les références c++11. Le programme compile correctement, mais eclipse ne peut pas les résoudre. Lorsque je vérifie "array", #ifndef __GXX_EXPERIMENTAL_CXX0X__ renvoie true et le code en dessous n'est pas analysé. Lorsque j'ajoute __GXX_EXPERIMENTAL_CXX0X__ aux symboles du projet, array est résolu mais les références de mon projet sont perturbées. Quel pourrait être le problème ici?

0 votes

Pas sûr de ce que vous voulez dire par vérifier le tableau. Avez-vous essayé de suivre les instructions sur mon blog?

0 votes

Oui, je l'ai fait. En fait, je viens de l'essayer avec un nouveau projet Eclipse, ça a fonctionné. Cependant, avec mon ancien projet, ça n'avait pas d'effet au début. Quand je l'ai fermé et rouvert, std::array est résolu, mais ensuite mes références de projet ne sont pas analysées, comme si j'ajoutais __GXX_EXPERIMENTAL_CXX0X__ manuellement. Maintenant j'ai environ 200 références de projet non résolues. Des idées sur comment je peux me débarrasser de ça ?

20voto

Andreas Points 170

Pour le dernier (Juno) eclipse cdt, ce qui suit a fonctionné pour moi, pas besoin de déclarer __GXX_EXPERIMENTAL_CXX0X__ par moi-même. Cela fonctionne pour l'indexeur CDT et en tant que paramètre pour le compilateur :

"le nom de votre projet" -> clic droit -> propriétés :

Général C/C++ -> Chemins d'inclusion de préprocesseur, Macros etc. -> basculer sur l'onglet nommé "Fournisseurs" :

  • 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 configuration entre les projets (fournisseur global)"

  • dans le champ "Commande pour obtenir les spécifications du compilateur :" ajoutez "-std=c++11" sans les guillemets (cela peut fonctionner avec des guillemets aussi)

  • appuyez sur appliquer et fermez les options

  • reconstruisez l'index

Maintenant, tout ce qui concerne c++11 devrait être résolu correctement par l'indexeur.

win7 x64, dernier eclipse officiel avec cdt mingw-w64 gcc 4.7.2 du projet mingwbuilds sur sourceforge

0 votes

Encore obtenir les mêmes avertissements d'éditeur erronés, comme dans Type 'std :: thread' n'a pas pu être résolu même s'il compile et s'exécute correctement

2 votes

Vous devez compiler une fois avec les nouveaux paramètres, afin que l'analyseur « apprenne » que le drapeau std=c++11 est défini

0 votes

Selon la version du compilateur, il pourrait être nécessaire d'ajouter -std=c++0x au lieu de -std=c++11 (par exemple debian wheezy)

15voto

Jerk31 Points 169

J'ai eu le même problème sur mon Eclipse Juno. Ces étapes ont résolu le problème :

  • Allez dans Project -> Properties -> C/C++ General -> Path and Symbols -> Onglet [Symbols].
  • Ajoutez le symbole : __cplusplus avec la valeur 201103L

2 votes

Cette réponse devrait être acceptée car elle fonctionne également pour les projets Makefile!

0 votes

@Jerk31 cela ne fonctionne pas pour Eclipse Juno tournant sous Windows (pour moi), je vois toujours ces erreurs inutiles signalées, même si le binaire fonctionne correctement. S'il vous plaît aidez-moi !!!

0 votes

Je suis vraiment désolé, je ne peux pas vous aider sur Windows car je n'ai pas l'opportunité d'essayer d'exécuter un projet C++ sur cet OS. Je vous souhaite le meilleur et bonne chance !

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