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 :

probleme: class A:public B< A::ref >


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Par défaut probleme: class A:public B< A::ref >
    Bonjour,
    Mon problème est le suivant: J'ai une class A héritant d'une class B dont le paramètre template est un type qui sera définit dans la class A
    Voici le code:
    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
     
    #include <iostream>
    using namespace std;
     
    template<class T>
    class B
    {
    public:
      T a;
    };
     
    class A:public B< A::ref >
    {
    public:
      typedef int ref;
     
    };
    int main()
    {
     A a;
    }
    Le message d'erreur est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    incomplete type «A» used in nested name specifier
    Y a-t-il une solution?

  2. #2
    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
    Par défaut
    Sur le principe, ce que tu veux faire est tordu.

    Imaginons que tu construise une voiture. Et là tu montes les roues avant le chassis.

    Tu dis que A va être implémentée non pas en fonction d'elle même(ça encore c'est normal) mais de quelque chose qu'elle va contenir... Je ne sais pas si il y a une solution élégante(ou une solution tout court) ...

    Mais ton A::ref, faut le faire passer ailleurs que dans A, sinon on y a pas accès, dans tous les cas.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Par défaut
    essaie de faire ça plutot:

    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
     
    #include <iostream>
    using namespace std;
     
    template<class T>
    class B
    {
    public:
      typename T::ref a;
    };
     
    class A:public B< A >
    {
    public:
      typedef int ref;
     
    };
    int main()
    {
     A a;
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Par défaut
    Ca plante pareil:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     _rm.cpp: In instantiation of «B<A>»:
    _rm.cpp:17:   instantiated from here
    _rm.cpp:14: erreur: invalid use of undefined type «class A»
    _rm.cpp:17: erreur: forward declaration of «class
    Avec la ligne 14 = typename T::ref a;
    et la ligne 17 = class A:public B< A >

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Par défaut
    Sur le principe, ce que tu veux faire est tordu.

    Imaginons que tu construise une voiture. Et là tu montes les roues avant le chassis.

    Tu dis que A va être implémentée non pas en fonction d'elle même(ça encore c'est normal) mais de quelque chose qu'elle va contenir... Je ne sais pas si il y a une solution élégante(ou une solution tout court) ...

    Mais ton A::ref, faut le faire passer ailleurs que dans A, sinon on y a pas accès, dans tous les cas.
    Je suis d'accord avec ton argument.

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Alp
    Sur le principe, ce que tu veux faire est tordu.

    Imaginons que tu construise une voiture. Et là tu montes les roues avant le chassis.

    Tu dis que A va être implémentée non pas en fonction d'elle même(ça encore c'est normal) mais de quelque chose qu'elle va contenir... Je ne sais pas si il y a une solution élégante(ou une solution tout court) ...

    Mais ton A::ref, faut le faire passer ailleurs que dans A, sinon on y a pas accès, dans tous les cas.
    C'est clair. Pour moi c'est pas possible. La compilation ne peut pas se faire.
    Il doit y avoir un autre moyen de modéliser celà -> autre conception !

  7. #7
    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
    Par défaut
    Oui poukill.

    vincho > dans ton code, à quel moment as-tu besoin de modéliser une telle chose? Mets-nous en situation, on sera plus efficace surement.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 28
    Par défaut
    Et en utilisant les traits, c'est correct comme solution ?

    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
    class A;
     
    template <class T>
    class Traits;
     
    template<>
    class Traits<A>
    {
       typedef int ref;
    };
     
    template <class T>
    class B
    {
       Traits<A>::ref MaVariable;
    };
     
    class A : public B<A>
    {
     
    };
     
    int main()
    {
       A a;
    }

    Mathieu

Discussions similaires

  1. hibernate problem (classe not mapped)
    Par oughlad dans le forum Hibernate
    Réponses: 11
    Dernier message: 25/06/2007, 19h57
  2. [probleme] classe de base non définie
    Par aswat dans le forum C++
    Réponses: 14
    Dernier message: 23/02/2007, 20h42
  3. probleme classe apres ajout de variable
    Par croc14 dans le forum Visual C++
    Réponses: 6
    Dernier message: 11/08/2006, 21h03
  4. probleme classe non trouvee
    Par foulla002 dans le forum Langage
    Réponses: 19
    Dernier message: 26/07/2006, 14h46
  5. probleme classe et chaines de caractères
    Par oilv dans le forum C++
    Réponses: 12
    Dernier message: 18/02/2006, 10h01

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