IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Type Predicate en argument d'une fonction dans une Template.


Sujet :

Langage C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut Type Predicate en argument d'une fonction dans une Template.
    Bonjour,

    Je souhaite créer dans une template une fonction prenant un predicat de type Predicate dans le but d'user de la foncton std::list<T>::remove_if(Predicate pred).

    Seulement je n'arrive pas à l'intérieur de ma classe à ce que le compilateur reconnaisse le type Predicate.

    Ma template est définit comme il suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <class t> class listing{
        public : 
             list<t> l ;
          ....
    }
    Et j'essaye à l'interieur de rajouter la fonction :
    template <class T> void Listing<T>::SupprimerElement(Predicate pred) ;

    Ne reconnaissant pas le type Predicate, j'ai testé de le faire passé pour un typename en écrivant :
    template <class T> void Listing<T>::SupprimerElement(typename Predicate pred) ;

    Mais le compilateur me jet.

    Listing.h:107: erreur: expected nested-name-specifier before ‘Predicate’
    Listing.h:107: erreur: expected ‘,’ or ‘...’ before ‘pred’
    Listing.cpp:54: erreur: variable or field ‘SupprimerElement’ declared void
    Listing.cpp:54: erreur: template declaration of ‘int SupprimerElement’
    Listing.cpp:54: erreur: expected nested-name-specifier before ‘Predicate’
    Listing.cpp:54: erreur: expected `(' before ‘Predicate’
    Si quelqu'un pouvait me donner la solution à ce problème je lui en serais grée .

    Merci d'avance.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    C'est probablement un problème avec la définition de ton type Predicate. Peux-tu la poster histoire de voir à quoi ça ressemble ?

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template <class Predicate>
    template <class T>
    void listing<T>::SupprimerElement(Predicate pred)
    {
       // ...
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut
    Merci ça fonctionne.
    Je ne savais pas que l'on pouvait faire cela

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut
    Je me permet de faire remonter ce topic car en faite autant dev c++ à la compilation passé sans soucis autant en usant de la solution au dessus, g++ m'indique que la fonction a trop de patron.

    Dans le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template<class Predicate> void SupprimerElement(Predicate pred);
    Dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    template <class T> template <class predicate> void SupprimerElement(Predicate pred){
    	l.remove_if(pred);
    };
    Donne comme erreur

    make
    g++ -c -Wall -Werror -Wextra -O3 `sdl-config --cflags` main.cpp Liste.h
    Liste.cpp:53: erreur: trop de patron de listes de paramètres
    Liste.cpp:53: erreur: trop de patron de listes de paramètres
    make: *** [main.o] Erreur 1

  6. #6
    Membre confirmé
    Profil pro
    Ingenieur
    Inscrit en
    Décembre 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur

    Informations forums :
    Inscription : Décembre 2003
    Messages : 138
    Par défaut
    et en essayant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    template <class T,class predicate> void SupprimerElement(Predicate pred){
    	l.remove_if(pred);
    };
    ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut
    J'avais testé cette solution mais à la compile voila le résultat :

    Liste.cpp: In function ‘void SupprimerElement(Predicate)’:
    Liste.cpp:54: erreur: ‘l’ was not declared in this scope
    Liste.cpp: In function ‘void SupprimerElement(Predicate)’:
    Liste.cpp:54: erreur: ‘l’ was not declared in this scope
    Il ne me reconnait plus la variables "l" representant la std::list.

  8. #8
    Membre confirmé
    Profil pro
    Ingenieur
    Inscrit en
    Décembre 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur

    Informations forums :
    Inscription : Décembre 2003
    Messages : 138
    Par défaut
    en meme temps dans le code du 1er post la liste membre est declarée en tant que L et non l

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut
    oui enfin dans ma classe c'est bien l mais j'ai la sale habitude de marqué L.
    Je vais corriger ça dans l'exemple.

  10. #10
    Membre chevronné Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Par défaut
    Ceci ne fonctionne pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // .h
    template <class T> class listing {
      public: 
        list<T> l;
        template <class Predicate> void SupprimerElement(Predicate pred);
        //...
    };
     
    // .cpp
    template <class T> template <class Predicate>
    void listing<T>::SupprimerElement(Predicate pred) {
      //...
    }

  11. #11
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut
    Ah j'avais lu la faq mais j'avais complètement oubliez le .tpp au lieu de .cpp. Je vais tester voir si ça viens de là
    Merci

    ps goodpz : j'avais aussi testé mais le coup du cpp y est peut-être pour quelque chose.

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Réponses: 8
    Dernier message: 10/01/2007, 21h10
  5. [PHP-JS] une fonction dans une fonction
    Par lodan dans le forum Langage
    Réponses: 6
    Dernier message: 25/06/2006, 19h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo