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 :

Appel d'une méthode sur une classe fille


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut Appel d'une méthode sur une classe fille
    Bonjour,
    Voici mon problème:
    J'ai une classe abstraite nommée : GraphLayout qui possède la méthode suivante: virtual void placement(Graph &graph) =0;
    J'ai une des ses classe filles nommée : StraightLayout qui implémente la méthode ci-dessus.

    Dans une 3ème classe, nommée Graph, j'ai en attribut : GraphLayout *layout;
    Je peux récupérer ce layout avec getLayout();
    Et je souhaite faire dans une de ces méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GraphLayout* l = this->getLayout();
    l->placement(this);
    Et là :erreur suivante:

    Dans Graph.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class GraphLayout;// =>graph.h:20: warning: forward declaration of `struct GraphLayout'
    class Graph{...}
    Dans Graph.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    l->placement(this); 
    //=>graph.cpp:341: warning: invalid use of undefined type `struct GraphLayout'
    //graph.cpp:341: note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined.
    Pouvez-vous m'aider s'il vous plaît?? Merci beaucoup parce que je ne comprends vraiment pas le problème...

  2. #2
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Points : 410
    Points
    410
    Par défaut
    Bonjour,

    je crois que la question que tu poses, sans le savoir est la suivante :
    Comment créer 2 classes qui font référence l'une à l'autre ?

    Il se trouve que ça tombe bien, deux excellents développeurs y ont déjà répondu.

    Bonne chance.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Je te remercie beaucoup en effet, c'était ça et je ne le savais pas...
    En plus, la solution est hyper simple : faire une inclusion dans le .cpp...
    J'ai bien fait de poster sur le forum, j'aurais jamais trouvé sinon. Encore merci.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Sauf que maintenant j'ai un autre problème...
    Comme vous avez vu, j'ai la signature suivante: void placement(Graph &graph);
    En effet, je veux que mon objet de type Graph soit modifier donc je le passe par référence..

    Cependant, quand je fais dans ma classe Graph: l->placement(this);
    J'obtiens l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    graph.cpp:104: error: no matching function for call to `GraphLayout::placement(Graph* const)'
    graphlayout.h:11: note: candidates are: virtual void GraphLayout::placement(Graph&)
    Donc j'ai bien compris que je ne luis passe pas ce qu'il faut..mais je ne sais pas ce qu'il faut lui passer...
    Please, help!

  5. #5
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 73
    Points : 68
    Points
    68
    Par défaut
    En C++, this est un pointeur, en l'occurence un Graph *. Or, ta méthode attend une référence vers un Graph, il faut donc que tu lui passes une instance de Graph. Pour ce faire, il faut que tu déréférences le pointeur this :

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Ok. C'est bon maintenant.
    Je savais pas que this c'était un pointeur.
    Merci beaucoup. et désolée parce que j'imagine, que ce genre d'erreur, n'enrichira pas beaucoup les connaissances des plus adeptes de ce forum.. Encore merci quand même

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

Discussions similaires

  1. Appel d'une méthode sur une classe avec héritage
    Par SasakiKojiro dans le forum Général Java
    Réponses: 13
    Dernier message: 17/04/2015, 18h56
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. Problème de thread sur une méthode d'une classe C++
    Par yoshi84300 dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 12/03/2013, 11h23
  4. Réponses: 6
    Dernier message: 05/03/2008, 20h53
  5. Réponses: 6
    Dernier message: 20/04/2007, 15h24

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