Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

09.09.2012, 01:20

class <Name>; was ist das?

Hallo Community

Ich bin grad dran einen StateManager zu programmieren und hab mir dazu schon fertige im Internet ein bisschen angeschaut. Einer der mir eig. ganz gut gefiel war der folgende. Was mich aber sehr verwirrt ist die Klassendeklaration(?) vor der eigentlichen Klasse. Was ist das, ich hab das noch nie gesehen

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// state_manager.h

#ifndef STATE_MANAGER_H
#define STATE_MANAGER_H

#include <vector>

class Game_State;

class State_Manager
{
public:
   State_Manager();
   ~State_Manager();

   void push_state( Game_State* game_state );
   void pop_state();
   void change_state( Game_State* game_state );

   void handle_events();
   void think();
   void draw();

protected:
   std::vector<Game_State*> mStateStack;
};

#endif // STATE_MANAGER_H


Quelle: Da

Hoffe ihr könnt mir die Frage kurz beantworten:)

EDIT: ich meine die Zeile "class Game_State;"^^

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

09.09.2012, 01:25

Das ist eine sogenannte forward declaration, damit die Klasse weiß, dass es die angegebene Klasse gibt.
Braucht man z.B. wenn 2 Klassen Funktionen der jeweils anderen verwenden sollen.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

3

09.09.2012, 01:41

Das ist eine sogenannte forward declaration, damit die Klasse weiß, dass es die angegebene Klasse gibt.
Braucht man z.B. wenn 2 Klassen Funktionen der jeweils anderen verwenden sollen.
Könntest du kurz ein Beispiel machen:) Am besten nicht grad mit Klasse A und Klasse B^^ Danke dir!

4

09.09.2012, 03:08

Ich nehme mal als Beispiel eine Eltern und eine Kind Klasse. Die Eltern sollten natürlich wissen welches Kind nun ihres ist und das Kind sollte wissen welche Eltern seine Eltern sind. Kurz gesagt beide Klassen müssen voneinader wissen.

Wenn du versuchts das ganze per #include zu lösen so wie hier:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
// eltern.h
#include "kind.h"

class Eltern {...}

// kind.h
#include "eltern.h"

class Kind {...}


Wirst du einen Compiler Error erhalten weil die Auflösung von #include "kind.h" wieder "eltern.h" einbindet und du so eine endlos Schleife hast.

Um das ganze jetzt doch umsetzen zu können braucht man forward declaration, so könnte das ganze dann aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// eltern.h

class Kind
class Eltern
{
public:
Kind * GetKind()
{
return m_Kind;
}
private:
Kind * m_Kind;
}

// kind.h
class Eltern;
class Kind
{
public:
Eltern * GetEltern()
{
return m_Eltern;
}
private:
Eltern * m_Eltern;
}


Das ganze funktioniert weil der Compiler nicht wissen muss wie Kind deklariert ist um einen Zeiger auf eine Kind-Objekt speichern zu können.
greate minds discuss ideas;
average minds discuss events;
small minds discuss people.

5

10.09.2012, 00:17

Das ganze funktioniert analog zu Funktionsdeklarationen und Funktionsdefinitionen. Die Deklaration sagt dem Compiler, dass es etwas mit diesem Namen gibt, die Definition sagt ihm, wie genau es aussieht. Das selbe gibt es auch für globale Variablen mit dem Schlüsselwort "extern" (dieses deklariert sie, statt sie zu definieren).
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige