Je dois appeler les propriétés et les fonctions d'un objet d'une classe différente.C++ - Comment appeler la classe/l'objet créateur
L'idée passe 'this' comme paramètre au constructeur de l'autre classe. .: par exemple
instance = ClassName(this);
Et puis faire:
ParentClass parentInstance;
ClassName::ClassName(MainApp _instance){
parentInstance = _instance;
}
Cependant, mon compilateur dit que ParentClass ne nomme pas un type. Des idées? De même, devrais-je utiliser un pointeur pour économiser de la mémoire? Comment?
Merci d'avance.
MISE À JOUR:
Ok, désolé pour le retard. Ici, il va le code réel. D'abord, une classe simple.
classe du jeu:
fichier d'en-tête
#ifndef _GAME
#define _GAME
#include "ofMain.h"
class Game{
public:
Game();
~Game();
void hi();
};
#endif
fichier cpp:
#include "Game.h"
Game::Game(){}
Game::~Game(){}
void Game::hi(){
cout << "hi, I'm game! " << endl;
}
Puis, à partir MainApp je crée l'objet: - code approprié sur fichier d'en-tête:
#ifndef _MAIN_APP
#define _MAIN_APP
#include "ofMain.h"
#include "Game.h"
class MainApp : public ofSimpleApp{
public:
Game game;
};
#endif
code approprié sur le fichier cpp:
game = Game();
game.hi();
Cela fonctionne évidemment que je crée seulement un objet sanglant. Cependant, le problème vient avec la composition.
Je pourrais passer l'application principale comme argument dans le constructeur, je pourrais le passer via game.setParent (this); ... le problème est, je ne peux même pas définir la variable pour stocker la référence à l'application.
Par exemple: (le rendant facile/inefficace sans pointeurs ou quoi que ce soit)
Game.h:
#define _GAME
#ifndef _GAME
#include "ofMain.h"
#include "MainApp.h"
class Game{
MainApp app;
public:
Game();
~Game();
void hi();
};
#endif
Ce retourne un "ne désigne pas un type" erreur et déclarant class MainApp
renvoie un « incomplet tapez "erreur
Je suis sûr que je fais quelque chose de stupide.
MISE À JOUR 2:
Le problème avec cette méthode est que je ne peux pas appeler une fonction de l'objet pointu maintenant.
Ceci est le jeu.h:
#ifndef _GAME
#define _GAME
#include "ofMain.h"
class MainApp;
class Game{
public:
Game();
Game(MainApp* _app);
~Game();
void hi();
MainApp* app;
};
#endif
Comme vous le voyez, l'application (de type MainApp) est transmise en tant que paramètre. C'est bien, MainApp existe car c'est la déclaration forward. Cependant, lorsque j'essaie d'appeler l'une des fonctions de l'application, je ne peux pas (erreur de compilation disant Demande de membre appHi dans .... qui est de type non-classe 'MainApp'
MainApp n'est pas inclus dans Game.h mais Game.h est inclus dans MainApp.h.
Idées?
Postez le code actuel. –
Vous devriez probablement jeter un coup d'oeil aux mécanismes de passage d'argument de différence (une brève description j'ai travaillé pour une autre question peut être trouvée [ici] (http://stackoverflow.com/questions/2139224/how-to-pass-objects-to -functions-in-c/2139553 # 2139553)) vous faites actuellement des copies au lieu de stocker des références au parent. En plus de cela, je suis fortement d'accord avec Neil: ** montre le vrai code **. –