|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Membre Expert
![]() |
Bonjour à tous.
C'est certainement parce que je ne suis pas encore très réveillé mais j'ai un petit problème pour trier une liste d'objets. Mon code compile et fonctionne très bien sous Visual Studio 2010, par contre, sous Linux avec g++ 4.5.3 il me sort cette erreur : Citation:
Code :
|
|||
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Ingénieur développement logiciels Inscription : août 2006 Messages : 186 ![]() |
Bonjour,
StartCopy()::sort_by_size je ne connais pas trop g++ et cette syntaxe, mais je pense que cela signifie que sort_by_size est local à la fonction StartCopy ? Si c'est le cas, il n'est pas possible d'utiliser un type local en argument template selon la norme C++2003. Cette restriction a été levée en C++2011 (et VS2010 doit déjà le permettre). GCC 4.5 (cf .Local and unnamed types as template arguments : N2657) l'implémente aussi mais il faut peut-être activer la compilation C++2011 pour que cela fonctionne. Sinon il est aussi possible de sortir la structure de la fonction (pour être compatible C++2003). |
|
|
20
|
|
|
#3 | |||
|
Membre Expert
![]() Junior developer C/C++/Embedded system Inscription : juin 2010 Messages : 656 ![]() |
La syntaxe serait pas plutôt
? Edit: ou plutôt d'après la doc Code :
Citation:
|
|||
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() |
Citation:
![]() Du coup il faut que je passe l'option -std=c++0x vu que j'ai la version 4.5 de gcc... C'est sur que je pourrais sortir la structure de la fonction, mais je préfèrerai qu'elle y reste dans le sens où je n'ai pas envie de trimballer des dizaines de mini-structures utiles uniquement à un endroit donné. C'est perturbant dans l'intellisense je trouve ![]() Merci bien de l'info, j'avoue ne pas avoir songé à la norme C++11, étant donnée que le compilo MS est très en retard sur cette norme pour autant que je sache. |
|
|
|
00
|
|
|
#5 | |||||||
|
Membre Expert
![]() |
Citation:
Comme supposé par gb_68 la déclaration de ma structure est à l'intérieur d'une méthode. J'utilise donc un foncteur pour faire ma comparaison. Si je veux utiliser une fonction je dois la déclarer en dehors de ma méthode et passer le pointeur de la fonction. Déclarer des fonctions à gauche à droite pour ce genre de comparaison, ça ne me plait pas trop, ce n'est pas très orienté objet non plus, enfin je trouve. Comme il s'agit d'une structure, on met les parenthèses pour indiquer qu'on instancie un objet et cet objet est passé en paramètre de sort. Je pourrais écrire ça comme ça : Code :
Code :
|
|||||||
|
|
00
|
|
|
#6 |
|
Membre expérimenté
![]() Léo GaspardLycéen Inscription : janvier 2012 Messages : 342 ![]() |
Quitte à utiliser c++11, pourquoi ne pas passer à une lambda ?
|
|
|
10
|
|
|
#7 |
|
Membre Expert
![]() |
Bah disons que sur mon code initial je ne savais pas qu'il nécessitait le C++11, donc je ne pensais pas avoir accès aux lambdas.
Mais si je suis effectivement obligé d'activer le C++11 pour que mon code fonctionne, je vais effectivement passer par une lambda. |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() |
Bon voilà, j'ai passé le flags std=c++0x et tout fonctionne, c'était donc bien ça mon problème.
Par contre pour les lambdas, ça fonctionne aussi à la compilation, mais l'IDE (KDevelop en l'occurrence) n'aime pas du tout et souligne tout en rouge ![]() Du coup je crois que je vais me passer des lambdas... Merci en tout cas de vos réponses, je passe le thread en résolut. |
|
|
10
|
|
|
#9 |
|
Membre éclairé
![]() Jun MaillardLycéen Inscription : juin 2009 Messages : 221 ![]() |
Si tu veux un support du c++11 dans KDevelop, les versions récente en ont un assez bon (dont la reconnaissance des lambda). Soit tu peux essayer la béta qui vient de sortir, soit tu peux recompiler KDevelop toi-meme (des explications sont disponibles ici).
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() |
A partir de quelle version c'est dedans le coup des lambas ? Parce que je suis sous Gentoo, avec un KDE 4.8 et un KDevelop 4.2.3, et KDevelop aime pas les lambdas (elles compilent et s'exécutent sans problème, c'est juste KDevelop qui souligne tout en rouge hurlant à la syntax error
)Je trouve KDevelop suffisamment instable comme ça, pas envie de me farcir une bêta
|
|
|
00
|
|
|
#11 |
|
Membre éclairé
![]() Jun MaillardLycéen Inscription : juin 2009 Messages : 221 ![]() |
Ah... Je crois que la 4.2.3 est la dernière "stable" en date (Juin 2011); mais les lambdas ne sont supportée que depuis Juillet 2011, donc elles ne devraient etre disponible que dans la 4.3.x
|
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() |
Bien, bah j'attendrai d'avoir la 4.3 en stable.
De toute façon avec Gentoo je l'aurai des les dépôts bien assez tôt. Dans la mesure où pour le moment il me souligne en rouge uniquement les expressions lambdas, ça n'a pas l'air de faire partir en vrille le reste de la validation syntaxique, du coup je vais peut être quand même me servir des lambdas, tant que c'est relativement ponctuel ça ne devrait pas poser de problème. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com