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

06.08.2006, 19:52

Global verfügbare Objekte

Hallo zusammen,

auch wenn es vielen das Grinsen ins Gesicht treiben dürfte :?

Wie mache ich das wenn ich ein Objekt einer Klasse in mehreren Funktionen brauche, die in unterschiedlichen Dateien stehen und es nur EIN Objekt geben darf. Heißt alle Funktionen müssen das gleiche Objekt verwenden.

Wie baue ich das strukturell am Besten auf und was ist da zu beachten?

Bei mir funktioniert es mal und mal nicht und ich bin noch nicht dahinter gekommen wieso.

Vielen Dank schonmal für die Hilfe

MfG

Abiet

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

2

06.08.2006, 20:01

Nutze Singletons dazu :)
Also eine Funktion die einen Zeiger auf die Klasse gibt :)
Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
//Deklaration:

CEngine* GetEnginePointer()

//Implementierung:

CEngine* GetEnginePointer()
{ 
 static CEngine* pEngine=0;
 if(!pEngine)
  { 
    pEngine=new CEngine;
  }
}


Das wars schon :)

Oder du baust solch eine Methode in die Klasse und ruft sie dann auf CEngine::Instance() und diese Methode holt die dann z.b. einen Zeiger/Objekt :)
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Anonymous

unregistriert

3

06.08.2006, 20:06

T-Virus
Bescheidene Frage: Wo ist das delete?

4

06.08.2006, 20:56

Danke für die schnelle antwort nur hätte ich noch eine frage dazu.

ich habe in einer .h Datei meine klasse stehen und in einer.cpp die methodendefinitionen der klasse.

nun will ich in 1.cpp 2.cpp 3.cpp das objekt der klasse verwenden....deine funktion muss die in die klassen .cpp oder .h datei oder in die einzelnen 1.cpp 2.cpp 3.cpp dadeien?

Anonymous

unregistriert

5

06.08.2006, 21:01

Am Besten ist Du vergisst den Code von T-Virus schleunigst schnell wieder, es sei denn Du willst gefährliche Programme schreiben. Such mal im Forum nach "Meyers Singleton", das ist mal ein Anständiger und nicht immer diesen mit "new ohne delete"

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

6

06.08.2006, 21:47

Jopp war mein Fehler :p hab das nich nicht eingebaut :p
Man kanns auch simpler machen ohne Zeiger ;)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
//Deklaration:

CEngine GetEnginePointer()

//Implementierung:

CEngine* GetEnginePointer()
{
 static CEngine Engine;
 return Engine;
}
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

7

06.08.2006, 22:16

so, nun gugg dir deinen code noch mal in ruhe an...

8

06.08.2006, 22:38

:D Da sagt man mal besser nix zu...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

9

07.08.2006, 07:44

Das kann man auch so lösen, dass man das ("einzig sein dürfende") Objekt A einfach an all die Stellen übergibt, wo man es braucht. Entweder beim Aufruf der entsprechenden Methoden, oder bei der Erzeugung der Objekte B, die Objekt A benutzen wollen.

Das hat später den Vorteil, dass man keine Probleme hat, wenn A doch nicht so einzigartig ist. :)

Ansonsten hat der Rest schon recht, benutze einen Singleton.

MfG,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

10

07.08.2006, 08:49

Sorry war fehler von mir :(
Hab das im halbschlaf zusammen getippt :p

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BeitragVerfasst am: 6. August 2006, 21:47    Titel:
Jopp war mein Fehler Razz hab das nich nicht eingebaut Razz
Man kanns auch simpler machen ohne Zeiger Wink

Code (C++):

//Deklaration:

CEngine& GetEngineReference()

//Implementierung:

CEngine& GetEngineReference()
{
 static CEngine Engine;
 return &Engine;
}


Somit solltest du die Referenz des Objekts bekommen wenn du ein einzigstes Objekt brauchst :p

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
void Draw();
{ 
 //Hier hast du die Reference des Static Objekts das du immer wieder aufrufen musst wenn du ein Objekt brauchst :)

 CEngine EngineObj=GetEngineReference();
 Engine.DrawScene();
}

int main()
{
 Draw();
}


Ist mal ein grobes Beispiel aber du soltest ja auch den Sinn verstehen und nicht gerade das verwenden ;D
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Werbeanzeige