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 :

problème d'accès dans une classe dérivée!


Sujet :

C++

Vue hybride

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Par défaut problème d'accès dans une classe dérivée!
    Salut!

    j'ai utilisé un mécanismes d'héritage, mais lorsque je veux appeller une methode qui se trouve dans une classe-fille, le compilateur me dit que cette méthode n'est pas un membre de de la classe mere!

    je comprend pas pourquoi il me dit ca???
    y'a t-il quelque chose de pariculier a faire, sinon comment faire pour acceder a cette méthode?????

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Il faudrait que tu donnes un ECM (Exemple Complet Minimal), enfin un peu de code quoi, qu'on voit ce que tu as fait...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Par défaut
    ok vais faire le plus simple possible!

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    //A.h
    class A
    {
    public:
       int var1;
       int var2;
    public:  
       A();
       ~A();
       void fonction_a(param);
    };
     
    ////////////////////////////
    // A.cpp
    A::A()
    {
       ...;
    }
    A::~A()
    {
       ...;
    }
     
    void A::fonction_a(param)
    {
       ...;
    }
    ////////////////////////////
    //B.h
    #include "A.h"
     
    class B:public A
    {
    public:   
       int varB1;
       int varB2;
    public:
       B();
       ~B();
       void fonctionB(param);
    };
    ////////////////////////////
    //B.cpp
    B::B():A()
    {
       ...;
    }
    B::~B():~A()
    {
       ...;
    }
     
    void B::fonctionB(param)
    {
       ...;
    }
    //////////////////////
    //dans main
     
    #include "A.h"
     
    int main()
    {
       A* ptr;
       ptr = new B();
       // acces à la méthode focntionB()
       ptr->fonctionB();  // ici le compilateur aime pas!!!
     
    }
    Le compilateur me dit que fonctionB n'est pas membre de A????!!!!!!!!

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Comme l'a dit Jean-Marc, meme si le type reel de ton objet est B, son type declare est A, donc pour C++, fonctionB n'existe pas pour ton objet...

    il te faut faire un static_cast : [code]static_cast<B*>(ptr)->functionB();[code]
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Par défaut
    ouai mais a ce moment l'héritage ca sert pas a grand chose alors....

  6. #6
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Si,
    Soit,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class A
    {
    ...
    virtual void fonctionB(param)=0;
    ...
    }

    En « virtual pur » tu ne peux plus utiliser A directement

    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class A
    {
    ...
    virtual void fonctionB(param){};
    }
    Qui ne fait rien en A et peut être surchargé en B

    D’ailleur un

    ne serait pas de trop

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par chrono23
    ouai mais a ce moment l'héritage ca sert pas a grand chose alors....
    Et comment veux-tu qu'il sache qu'il doit appeler un membre fonctionB de la classe B et pas de la classe C qui hérite aussi de A et a aussi un membre fonctionB?

  8. #8
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par chrono23
    Salut!

    j'ai utilisé un mécanismes d'héritage, mais lorsque je veux appeller une methode qui se trouve dans une classe-fille, le compilateur me dit que cette méthode n'est pas un membre de de la classe mere!

    je comprend pas pourquoi il me dit ca???
    y'a t-il quelque chose de pariculier a faire, sinon comment faire pour acceder a cette méthode?????
    Si tu veux accèder à un membre de la classe fille, il faut le faire à travers un objet qui soit de ce type. Si tu as un pointeur vers la classe mère, même s'il pointe effectivement vers une instance de la classe fille, tu ne peux pas appeler les membres de la classe fille.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Si tu veux accèder à un membre de la classe fille, il faut le faire à travers un objet qui soit de ce type. Si tu as un pointeur vers la classe mère, même s'il pointe effectivement vers une instance de la classe fille, tu ne peux pas appeler les membres de la classe fille.
    Mon ptr est déclarer comme A, mais il instancie l'objet B, donc ca devrait marcher non????

Discussions similaires

  1. Problème d'accès dans une classe (.h vs .cpp)
    Par D3V1L J4M dans le forum Débuter
    Réponses: 2
    Dernier message: 05/09/2008, 14h54
  2. Problème de setInterval dans une Classe
    Par jeremie74 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 21/08/2007, 19h45
  3. Réponses: 8
    Dernier message: 17/04/2007, 11h35
  4. Problème Access Violation dans une classe
    Par randriano dans le forum C++Builder
    Réponses: 1
    Dernier message: 11/04/2007, 18h49
  5. Réponses: 4
    Dernier message: 17/03/2007, 01h06

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