Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Variablen mehreren Klassen verfügbar machen

Hallo fleißiger Leser,  ;D

ich habe wahrscheinlich ein kleines Designproblem, sonst würde ich die Frage nicht stellen müssen, das war noch nie mein Ding. Nunja, zu meinem Problem:

In einem Projekt instanziere ich in der main-Funktion mehrere Klassen, die aber auf elementare Daten zugreifen müssen, die (bis jetzt) in der main initialisiert werden. Es handelt sich dabei um diverse Variablen.
Meine Elementar-Funktionen habe ich schon in eine elements.cpp/.h ausgelagert und in allen Klassen inkludiert, aber bei Variablen meckert der Compiler, da ich dann diese mehrfach deklariere.

Gibt es eine Möglickeit, Variablen elementar auszulagern so dass alle Klassen auf diese zugreifen können? Am besten ohne, dass ich Pointer von Instanz zu Instanz schubse, das artet wohl etwas aus.

Gruß Spawn


Antworten zu Variablen mehreren Klassen verfügbar machen:

Das klingt jetzt so wirr, dass Du wohl am besten mal ein bisschen Code postest....  ;)

Richtig fette globale variablen macht man so:

X.h

extern int x;

X.cpp
int x;

Jetzt kannst du X.h überall includen und x benutzen :-)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Oho, das geht? Abgesehen davon, dass ich's gleich mal probiere, hier mal etwas konkretere (und hoffentlich auch klarere) Angaben zum Code:

Also.......ich habe eine main.cpp, die unter anderen diesen Code enthält:

void InitSDL
{
  ...
  screen = SDL_SetVideoMode(1024, 768, 16, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN);
  ...
}

int main(int argc, char *argv[])
{
  InitSDL();
  ...  
  figuremax = 1;
  Figures = new Figure*[figuremax];
  Figures[0] = new Figure(0,"Unser Held");
  ...
  Figures[0]->Draw(screen);
  ...
}

Bis dahin alles super, hier noch die zugehörige Klasse Figure aus der Figure.cpp/.h (in Auszügen)

void Figure::SetImage(SDL_Surface *new_image)
{
  image = new_image;
}

void Figure::Draw(SDL_Surface *target)
{
   SDL_BlitSurface(image, NULL, target, &rect);
}

Prinzipiell immer noch kein Problem.
Es handelt sich also um ein SDL-Projekt. In der Main wird ein Screen initialisiert und dann werden verschiedenste Figuren instanziert, die sich bei Bedarf auf den Screen zeichnen dürfen.
Dafür muss ich allerding den screen übergeben.

Nun brauche ich aber für viele Sachen den Screen und andere elementare Sachen wie die Größe des Spielfeldes etc und will nicht andauernd den ganzen Variablen-schwanz an den Funktionsaufruf ranhängen.

Deshalt war mein erster Gedanke eine Header "elements.h", die in etwas so aussehen sollte:

#ifndef __ELEMENTS_H__
#define __ELEMENTS_H__
#include <SDL/SDL.h>

SDL_Surface *LoadBMP(const char *filename);
bool RectCollision(SDL_Rect *rect1, SDL_Rect *rect2);

SDL_Surface* screen;
int xmax, ymax;
...
//und alles, was so wichtig ist

#endif

Das ist bei den Funktionen super gelaufen, aber wenn ich nun Variablen in die Header schreibe und diese sowohl in der main.cpp als auch der figure.cpp inkludiere dann kommt eben diese Fehlermeldung ala "Variable mehrfach deklariert" da ja die main sowohl von sich als auch der figure die Deklaration bezieht.

Das wollte ich nun also umgehen und werde das gleich mal versuchen.

Vielen Dank schonmal

Spawn
« Letzte Änderung: 23.04.05, 00:55:36 von Spawn »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Cooles Ding!!!! Das scheint super zu funktionieren.

Habs erstmal "nur" mit ner int versucht und das ging super, jetzt kommen die ganzen lustigen SDL-Gebilde...

Gibt's da nen Nachteil? (ausser das globale Variablen etwas unelegant sind und der Übersicht nicht sonderlich zuträglich)

Viiiiielen Dank Spawn

Gibt's da nen Nachteil? (ausser das globale Variablen etwas unelegant sind und der Übersicht nicht sonderlich zuträglich)

Noe. Nur kannst Du dann das ganze restliche C++ gedoedel auch gleich sein lassen...

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Mmh, wie gesagt: Klassen-Design gehört nicht wirklich zu meinen Stärken...

Wie kann ich es denn elegant machen, dass ich aus der Main z.B. ein paar Instanz der Figure und noch ein paar für Computergegner erstelle, die dann aber alle auf Sachen zugreifeb können, die ich auch in der Main benutzen will? Wie eben z.B. die "int *field" etc...


« Java-Kenner gesucht...zip ordner mit kennwort »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Datenbank
Eine Datenbank (DBS), im englischen database, ist eine strukturierte Datensammlung und fungiert wie ein "digitales Archiv". Datenbanken dienen der effizienten Aufbewahrun...

Datenkompression
Siehe komprimieren. ...

Datenrate
Die Datenrate, oft auch als Datenübertragungsrate oder Datentransferrate bezeichnet, gibt an, wie viele Daten in einer bestimmten Zeiteinheit (meistens pro Sekunde) ...