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

 C++ Discussion :

Une classe template dans une autre classe template et ordre de déclaration des éléments


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 14
    Points : 19
    Points
    19
    Par défaut Une classe template dans une autre classe template et ordre de déclaration des éléments
    Bonjour à tous,

    quand j'écris :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    template<typename PTYPE, int DIM>
      class PairSingInfo{
     
    // des trucs
     
       void initializeOXYZ()
       {
          return InitializeOXYZ_impl<PTYPE,DIM>::initializeOXYZ(*this);
       }
     
      friend struct InitializeOXYZ_impl<PTYPE,DIM>;
     
    //d'autres trucs
    };
     
    template<typename PTYPE, int DIM>
    struct InitializeOXYZ_impl{};
     
    template<typename PTYPE>
    struct InitializeOXYZ_impl<PTYPE,2>{
      void initializeOXYZ(PairSingInfo<PTYPE,2>& p){
    //des trucs
      }
    };
     
    template<typename PTYPE>
    struct InitializeOXYZ_impl<PTYPE,3>{
      void initializeOXYZ(PairSingInfo<PTYPE,3>& p){
    //des trucs
      }
    };
    j'obtiens l'erreur "error: ‘InitializeOXYZ_impl’ is not a class template". Cette erreur n'est pas difficile à régler : il suffit de mettre le morceau de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    template<typename PTYPE, int DIM>
    struct InitializeOXYZ_impl{};
    au début. Mais pourquoi ? Le code, par exemple, se fiche que la fonction membre initializeOXYZ(PairSingInfo<PTYPE,3>& p) de InitializeOXYZ_impl soit déclarée après la déclaration de PairSingInfo ... ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    parce qu'un compilateur c'est bête et méchant. Si arrivé sur la ligne il connait pas un objet, il te l'indique.
    Déplace ton amitié plus haut, elle fait aussi office de forward declaration.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/04/2011, 08h06
  2. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  3. Réponses: 2
    Dernier message: 12/01/2009, 15h33
  4. Réponses: 7
    Dernier message: 03/12/2008, 15h18
  5. Réponses: 1
    Dernier message: 11/06/2008, 13h33

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