2014-03-06 42 views
6

Ich habe Schwierigkeiten, eine Klasse in einer anderen Klasse zu instanziieren. Mein Hauptanliegen ist ... Wo stelle ich den Konstruktor? In der Header-Datei? In der Klassendatei? Oder in beiden? Nichts scheint richtig zu funktionieren. Ich werde versuchen, das so einfach wie möglich zu machen. Lassen Sie mich wissen, wenn es zu einfach ist;) Dies ist, wie ich denke, es wäre sein sollte:C++ Instanziieren einer Klasse innerhalb einer Klasse. Der richtige Weg?

GameWorld.h:

#include "GameObject.h" 

class GameWorld 
{ 
protected: 
    GameObject gameobject; 
} 

GameWorld.cpp:

#include "GameWorld.h" 

void GameWorld::GameWorld() 
{ 
    GameObject gameObject(constrctor parameters); 
} 

//When I compile the program, the values in the gameObject, are not set to anything. 

Also das ist eine der die Dinge, die ich versucht habe. Das Einfügen des Konstruktors in die Kopfzeile funktioniert aus offensichtlichen Gründen ebenfalls nicht. Ich kann von GameWorld keine Parameter angeben.

Was ist der richtige Weg, dies zu tun?

Bearbeiten: Hoppla. Etwas nutzlos entfernt.

+0

Sie deklarieren die Klasse in der Kopfzeile. Und dort deklarieren Sie den Konstruktor, den Destruktor usw. Dann definieren Sie in der cpp-Datei den Konstruktor. Hier können Sie eine Initialisierungsliste erstellen, um alle Mitgliedsvariablen in der Klasse zu initialisieren. Sie können auch eine Argumentliste im expliziten Konstruktor verwenden und diese Eingaben auf das festlegen, was Sie möchten. – CoryKramer

Antwort

10

Sie müssen das Element GameObject in der enthaltenen Klasse 'Initialisierungsliste initialisieren.

// In the GameWorld.h header.. 
class GameWorld 
{ 
public: 
    GameWorld(); // Declare your default constructor. 

protected: 
    GameObject gameobject; // No() here. 
} 

// In the GameWorld.cpp implementation file. 
GameWorld::GameWorld() // No 'void' return type here. 
    : gameObject(ctorParams) // Initializer list. Constructing gameObject with args 
{ 
} 
+0

Aber der Konstruktor ist bereits in der cpp-Datei? Kann nicht zwei Konstruktoren haben:/Ich füge das also dem contrustor in der cpp-Datei hinzu? Edit: Ah ja, das funktioniert! Aber wie würde das funktionieren, wenn neue Objekte im laufenden Betrieb erstellt werden? Dang Ich muss wirklich herausfinden, wie man meinen Vektor arbeiten lässt. Ich denke, das sollte in einer anderen Frage sein? : P – Frederik

+1

Der Konstruktor muss in der Klassendeklaration _declared_ sein. Es braucht dann eine Definition, die angibt, was es tatsächlich tut. – Aesthete

+1

Dafür ist _dynamic allocation_ gedacht. Sehen Sie sich Zeiger, neue und STL-Konstrukte wie Vektoren und Karten an. Wenn Sie Fragen dazu haben, sollten Sie eine neue Frage stellen. – Aesthete

0

Ich glaube, Sie würden die Gameobject innerhalb der Spielwelt Header deklarieren möchten, dann die Gameobject in der Spielwelt Konstruktor-Objekt erstellen.

//GameWorld.h 
#include GameObject.h 

class GameWorld 
{ 
private: 
    GameObject object; 

}; 

//GameWorld.cpp 
#include GameWorld.h 

GameWorld::GameWorld() 
{ 
    object(); 
}