JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=358d90897f264b1c5555d45fd6c91e66Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Globale Deklarationen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Otscho
Super JLI'ler


Alter: 35
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 10.06.2007, 15:57    Titel: Globale Deklarationen Antworten mit Zitat

Ich hab mich mal so durch den Code der DirecX-Samples durchgewühlt und dabei ist mir aufgefallen wie sinnvoll es wäre globale Instancen, Variablen oder Devices zu haben, auf die alle Klassen zugreifen können. Als ich das dann versucht habe, war meine Euphorie jedoch schnell wieder verflogen.
Zuerst habe ich es folgendermaßen probiert:
MainSource.cpp:
Code:
int subberglobalesInt;
#include "SubSource.h"
SubSource.cpp:
Code:
#include "SubSource.h"
subberglobalesInt = 3;

Dann hat mir der Compiler weißmachen wollen, dass es in SubSource.cpp keine Variable namens subberglobalesInt gäbe.
Ich hab immer gadacht der Präprozessor würde bei jedem #include das entsprechende File einfügen und den Code folgendermaßen zusammensetzen:
Code:
int subberglobalesInt;
subberglobalesInt = 3;
War dann aber net so.
Dann hab ich mir gedacht ich deklariere meine subberglobale Variable in einen extra Header, die ich dann bei jeder Source-Datei einfüge:
Header:
Code:
#ifndef GLOBALSFILE
#define GLOBALSFILE

int subberglobalesInt;

#endif GLOBALSFILE
Da war dann der Compiler zwar zufrieden, doch dem Linker hat das überhaupt nicht gefallen. Der meinte nämlich, ich würde subberglobalesInt zu oft deklarieren. Hmm !
Nun bin ich mit meinem Latein am Ende und meine Euphorie der globalen
Deklarationen schwindet mehr und mehr. Gibt es da vielleicht jemande der mir mit Tipps und Tricks wieder Mut machen kann ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 10.06.2007, 16:28    Titel: Antworten mit Zitat

Das ist auch alles richtig, was der Compiler und der Linker sagen Very Happy Woher soll SubSource.cpp auch int subberglobalesInt; kennen, wenn du es in MainSource.cpp deklarierst?

Was du machen kannst ist:

int subberglobalesInt;

in MainSource.cpp zu deklarieren und dann in SubSource.cpp

extern int subberglobalesInt;

Das ist aber nicht so schön. Am besten du schreibst dir eine Singleton-Klasse, in der du die "globalen" Variablen unterbringst

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Otscho
Super JLI'ler


Alter: 35
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 10.06.2007, 16:33    Titel: Antworten mit Zitat

Danke für die schnelle Antwort bloß was ist ne "Singleton-Klasse" ?
Ist das was anderes wie meine globals.h ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
manu
Super JLI'ler


Alter: 35
Anmeldedatum: 09.03.2006
Beiträge: 327
Wohnort: allgäu (DE)
Medaillen: Keine

BeitragVerfasst am: 10.06.2007, 16:55    Titel: Antworten mit Zitat

Otscho hat Folgendes geschrieben:
Danke für die schnelle Antwort bloß was ist ne "Singleton-Klasse" ?
Ist das was anderes wie meine globals.h ?


guck dazu einfach mal ins Tutorials unterforum hier Smile

ist halt ne klasse mit nur einer instanz die du von "überall" erreichst^^

edit:
konkret:
http://www.jliforum.de/board/viewtopic.php?t=4157
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 11.06.2007, 09:01    Titel: Antworten mit Zitat

Ich würde vorsichtig sein bei der Verwendung von Singleton Klassen, genauso wie bei globalen Variablen.

Sowas macht meiner Meinung nach den Code unübersichtlicher und ist meist eigentlich auch nicht notwendig.
OOP besteht aus Klassen und Klassenbeziehungen. Wenn ich einer Klasse im Konstruktor einen Zeiger z.B. auf eine Klasse namens GraphicsDevice gebe, dann ist klar dass die Klasse Zugriff auf darauf hat, und braucht. Wenn man globale Klassen verwendet hat man diese Übersicht nicht mehr und man verliert den Überblick welche Kklasse welche Abhängigkeiten besitzen.

Natürlich gibt es Probleme bei deren Lösung Singletons sehr hilfreich sein können, aber ich würde vorsichtig bei der verwendung sein, sonst hat man irgendwann einen Haufen von Singletons rumfliegen und weiß nicht mehr wie die zueinander stehen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Maxim
Senior JLI'ler



Anmeldedatum: 28.03.2004
Beiträge: 249

Medaillen: Keine

BeitragVerfasst am: 11.06.2007, 09:32    Titel: Antworten mit Zitat

naja, singletons kann man ohne große sorgen verwenden wenn die klasse in keiner beziehungen zu einer ander steht oder wenn die klasse ein art verwaltungsklasse ist z.B. RessourcenManager oder ähnliches.
ich verwende singletons immer dann, wenn ich genau weiß, dass nur eine instanz der klasse benötigt wird und damit man die übersicht nicht verliert sollte man sowieso klassenbeziehungen als ein diagramm haben.

PS:
ich bin ein großer fan von OOP, aber ich muss sagen, dass OOP (ich spreche nur für c++) nicht immer optimale lösung bietet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.06.2007, 16:51    Titel: Antworten mit Zitat

Ich finde es wichtig, viele Techniken zu kennen, und zu wissen, wann man sie einsetzen sollte. Wenn mein Infolehrer meint, eine einzelne Stringfunktion, die ich mal gerade geschrieben habe, müsste in eine extra klasse, finde ich das einfach nur noch dämlich (zumal ja globale Variablen "verboten" sind, und ich so in jeder Funktion die die Klasse dann braucht Konstruktor und Destruktor per Hand aufrufen muss, Delphi eben).
Ich verwende auch nicht nur Singletons, aber schon überall dort, wo es gerade passt. Denn Zeiger auf Grafik- und Soundklassen von Objekt zu Objekt weiter zu reichen und zu speichern, st auch unübersichtlich. Und ich weiß ja, dass das Level sich anzeigt und Geräusche macht, ebenso wie die Spielfiguren darin.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum