2 votes

Appeler une fonction dans les membres d'une classe (C++)

Z.h

struct Z {
    Z();
    ~Z();
    void DoSomethingNasty();
}

X.h

struct X {
    X();
    ~X();
    void FunctionThatCallsNastyFunctions();
}

MainClass.h

#include "Z.h"
#include "X.h"

struct MainClass {
    MainClass();
    ~MainClass();
  private:
    Z _z;
    X _x;
}

X.cpp

X::FunctionThatCallsNastyFunctions() {
  //How can I do this? The compiler gives me error.
  _z.DoSomethingNasty();
}

Que dois-je faire pour appeler DoSomethingNasty() de la fonction _z objet ?

4voto

Tyler McHenry Points 35551

Le compilateur vous donne une erreur parce que _z n'existe pas dans le X elle existe au sein de la classe MainClass la classe. Si vous voulez appeler une méthode sur une Z l'objet de X vous devez soit donner X son propre Z ou vous devez lui en passer un en tant que paramètre. La solution la plus appropriée dépend de ce que vous essayez de faire.

Je pense que votre confusion peut être la suivante : Vous pensez que parce que MainClass a à la fois un X et un Z ils devraient pouvoir accéder l'un à l'autre. Ce n'est pas comme ça que ça fonctionne. MainClass peut accéder aux deux, mais le _x y _z les objets, dans leurs fonctions membres, n'ont aucune idée de ce qui se passe en dehors de leur propre classe.

0voto

JaredPar Points 333733

Vous n'avez pas fourni l'erreur de compilation, mais d'après l'échantillon, je suppose que l'erreur de compilation est due au fait que vous avez seulement déclaré la fonction DoSomethingNasty, mais que vous ne l'avez pas définie. Cela entraînerait une erreur au moment de la liaison.

Essayez d'ajouter le code suivant à votre fichier .cpp

void Z::DoSomethingNasty() {
  // Code here
}

De plus, comme l'a souligné @Tyler, la classe X ne possède pas de variable membre nommée _z à partir duquel on appelle la fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X