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

05.03.2010, 19:37

Globale Variablen mit extern verfügbar machen

Hallo Leute,
ich stehe gerade auf dem Schlauch.
Ich will, den Zeiger auf die Hauptklasse meines Spiels für
alle Dateien verfügbar machen.
Und zwar mit "extern".
Das hat bis jetzt auch immer schön geklappt aber jetzt will es nicht.

Main.cpp

C-/C++-Quelltext

1
CMain* g_pMain = NULL;


Main.h

C-/C++-Quelltext

1
extern CMain* g_pMain;


Aber wenn ich versuche den Zeiger in anderen Cpps zu nutzen, sagt der
Compiler mir, dass dieser nciht deklariert wäre.

Danke schon mal für eure Hilfe ;)

mfg

//Edit: Achja alle Cpps werden mit ihren Headern verlinkt und in der Main.h werden alle anderen Headers eingebunden.

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

2

05.03.2010, 19:56

CMain ist wahrscheinlich noch nicht deklariert.
Schreib mal

C-/C++-Quelltext

1
class CMain;
vor die Zeile in Main.h
"Have you tried turning it off and on again?"

3

05.03.2010, 20:05

Nee ich zeig euch mal ein wenig mehr code.
Die Klasse ist schon Deklariert.

Main.h

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <TriBase.h>
#include "MainMenu.h"
#include "Intro.h"

enum EGameState
{
    GS_NONE,
    GS_INTRO,
    GS_MAINMENU,
    GS_GAME
};

class CMain  
{
    public:
        tbConfig   m_Config;
        EGameState m_GameState;
        float      m_fTime;

        tbFont*    m_pFont;

        CIntro*    m_pIntro;
        CMainMenu* m_pMainMenu;
        //CGame*   m_pGame;


        tbResult Run();
        tbResult SetGameState(EGameState NewGameState);
        tbResult Init();
        tbResult Exit();
        tbResult Load();
        tbResult Unload();
        tbResult Move(float fTime);
        tbResult Render(float fTime);

};

extern CMain* g_pMain;
extern float* g_pfButtons;
extern BOOL*  g_pbButtons;
extern float* g_pfOldButtons;
extern BOOL*  g_pbOldButtons;

inline BOOL Button(int iButton) {return !g_pbOldButtons[iButton] && g_pbButtons[iButton];}
inline BOOL ButtonRe(int iButton) {return g_pbOldButtons[iButton] && !g_pbButtons[iButton];}

main.cpp

C-/C++-Quelltext

1
2
3
#include "Main.h"

CMain* g_pMain = NULL;

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

05.03.2010, 20:16

Re: Globale Variablen mit extern verfügbar machen

Zitat von »"ahhhilfe"«

//Edit: Achja alle Cpps werden mit ihren Headern verlinkt und in der Main.h werden alle anderen Headers eingebunden.


du bindest alle header in main.cpp ein? das ist doch gar nicht nötig wenn du sie dort nicht brauchst.
du hast die main.h in den cpp dateien in den du den zeiger brauchst nicht eingebunden? wenn nicht dann ist das dein fehler.

hast du nicht gelernt, dass man solche globalen variablen nicht benutzt? besonders keine zeiger...
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

5

05.03.2010, 20:33

Nein, ich binde nicht alle header in main.cpp ein.
Ich binde alle header in main.h ein.

Zitat


hast du nicht gelernt, dass man solche globalen variablen nicht benutzt? besonders keine zeiger...

Soo wie ich es geamcht habe war es im buch erklärt.

6

05.03.2010, 20:40

Soo hab's geschafft.
Hab alle Cpp-Dateien mit Main.h gelinkt und Main.h bindet die Header ein.

mfg

7

07.03.2010, 16:34

Ich finde es ist einfacher wenn man mit Singletons arbeitet.
Die sind einfach zu deklarieren und funtionieren in jeder Datei. Alles was man brauch ist die Singleton.hpp

wollt ich nur mal anmerken, falls es jemanden interessiert!

MfG Nick
Aller Anfang ist schwer

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

8

07.03.2010, 16:59

im grunde ist es ein singleton. er benutzt nur keine extra klasse die sie verwaltet. das macht das ganze leider ziemlich unsicher :/
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige