Search code examples
c++oopmemoryobjectparent

C++ - How to call creator class/object


I need to call properties and functions of an object from a different class.

The idea is passing 'this' as a parameter to the other class constructor. E.g.:

instance = ClassName(this);

And then do:

ParentClass parentInstance;
ClassName::ClassName(MainApp _instance){
    parentInstance = _instance;
}

However, my compiler says that ParentClass does not name a type. Ideas? Also, should I use a pointer to save memory? How?

Thanks in advance.


UPDATE:

Ok, sorry for the delay. Here it goes the actual code. First, a simple class.

Game class:

Header file

#ifndef _GAME
#define _GAME

#include "ofMain.h"

class Game{

 public:
  Game();
  ~Game();

  void hi();
};

#endif

cpp file:

#include "Game.h"
Game::Game(){}
Game::~Game(){}

void Game::hi(){ 
cout << "hi, I'm game! " << endl;
}

Then, from MainApp I create the object: - Relevant code on header file:

#ifndef _MAIN_APP
#define _MAIN_APP

#include "ofMain.h"
#include "Game.h"

class MainApp : public ofSimpleApp{
 public:
  Game game;
};

#endif

Relevant code on the cpp file:

game = Game();
game.hi();

This obviously works as I'm only creating a bloody object. However, problem comes with composition.

I could pass the main app as argument in the constructor, I could pass it via game.setParent(this);... problem is, I can't even define the variable to store the reference to the app.

E.g.: (making it easy/inefficient without pointers or anything)

Game.h:

#define _GAME
#ifndef _GAME

#include "ofMain.h"
#include "MainApp.h"

class Game{
 MainApp app;

 public:
  Game();
  ~Game();

  void hi();
 };
#endif

This returns a "does not name a type" error and declaring class MainApp returns an "incomplete type" error

I'm sure I'm doing something dumb.


UPDATE 2:

The problem with that method is that I can't call a function of the pointed object now.

This is Game.h:

#ifndef _GAME
#define _GAME

#include "ofMain.h"

class MainApp;
class Game{


 public:
  Game();
  Game(MainApp* _app);
  ~Game();

  void hi();

  MainApp* app;
};

#endif

As you see, app (of the type MainApp) is passed as a parameter. That's fine, MainApp exists as it's the forward declaration. However, when I try to call any of app's functions I can't (compiler error saying Request for member appHi in .... which is non-class type 'MainApp'.

MainApp is NOT included in Game.h but Game.h IS included in MainApp.h.

Ideas?


Solution

  • The problem is you have a circular reference - Game includes MainApp, and MainApp includes game. You need a 'forward declaration', as per the example by DeadMG.

    See here.