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 :

probleme template a plusieurs parametres


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Par défaut probleme template a plusieurs parametres
    Bonjour,

    Je fais un template qui prend deux parametres, et dans une des méthodes je voudrais passer le premier paramètre a une méthode statique template du deuxieme paramètre. ca donne cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    template <typename A, typename B>
    class Foo
    {
    public:
      int methode(const B& ref)
      {
           A *p = B::getMachin<A>(ref);
     
           if (!p)
              return -1;
     
    	return p->getInt();
      }
    };
    Le problème se situe a niveau de la ligne A *p = B::getMachin<A>(ref)
    Le compilo (vc2005) me sort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Foo.hpp(35) : error C2275: 'A' : illegal use of this type as an expression
    1>        TypeA.h(63) : see declaration of 'TypeA'
    1>        Template.hpp(34) : while compiling class template member function 'int Foo<A,B>::methode(const B &)'
    1>        with
    1>        [
    1>            A=TypeA,
    1>            B=TypeB
    1>        ]
    1>        TypeA.h(63) : see reference to class template instantiation 'Foo<A,B>' being compiled
    1>        with
    1>        [
    1>            A=TypeA,
    1>            B=TypeB
    1>        ]
    Je ne comprend pas pourquoi il n'aime pas, la methode statique getMachin renvoie bien évidement un pointeur sur le type qu'on lui passe en paramètre template.

    edit : Je precise que la class A (TypeA) hérite de Foo.

    Quelqu'un voit comment résoudre l'erreur ?

  2. #2
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B::template getMachin<A>(ref);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Par défaut
    Merci, ca semble mieux aller, mais je ne connaissait pas cette subtilité.
    ca change quoi ? c'est plus ansi ?

  4. #4
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    C'est la régle, c'est définie par la norme.
    Sinon le compilo ne sait pas que B::getMachin est un template, et donc il parse '<' comme l'opérateur de comparaison "strictement inférieur".

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    L'idée générale est un peu comme celle du typename. Avec un paramètre générique, le compilo ne sait rien sur ce type. Il faut donc l'aider un peu : avec typename lorsqu'on utilise un type à l'intérieur du paramètre générique et avec template lorsqu'on appelle une fonction générique du paramètre générique.

Discussions similaires

  1. Plusieurs parametres template
    Par jfouche dans le forum Langage
    Réponses: 11
    Dernier message: 03/05/2009, 13h58
  2. [pgplsql] probleme de passage de parametre
    Par Spoutnik dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/05/2004, 01h11
  3. Réponses: 5
    Dernier message: 12/05/2004, 16h37
  4. procedures/fonctions stockees : renvoi de plusieurs parametr
    Par Spoutnik dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 11/05/2004, 11h53
  5. Probleme de passage de parametre a un TQuery
    Par gve21 dans le forum C++Builder
    Réponses: 7
    Dernier message: 15/01/2004, 15h49

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