JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Globale Variablen bei Modulen

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



Anmeldedatum: 02.05.2003
Beiträge: 6

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 15:58    Titel: Globale Variablen bei Modulen Antworten mit Zitat

Der Übersichtlichkeit halber will ich mein Programm
(ist zwar auch in DirectX, aber ich denke, dass das Problem bei C++ liegt, also hab ich es hier rein geschrieben) in diverse Module aufteilen.
Jede größere Funktion oder kleinere Funktionengruppen sollen in einzelne Quellcodedateien geschrieben werden.

Nun müssen diverse der Funktionen auf einige globale Variablen
(Hier das Fensterhandle etc.) zugreifen.
Wenn ich die globalen Variablen in einer header-Datei initialisiere und mit den einzelnen Quellcode-Datei auf diese zugreife, gibt mir der Compiler die Fehlermeldung, dass die Variable mehrfach initialisiert wurde.

Ich will nicht sämtliche Funktionen mit in die Datei schreiben, in der die Variablen initialisert wurden, und jeder Funktion die Variablen als Parameter zu übergeben klappt auch nicht in jedem Fall (z.B. beim MessageHandler)

Wie muss ich nun meine Dateien anlegen, sodass ich die globalen Variablen in einer, und die einzelnen Funktionen in mehreren anderen Dateien liegen.
(Bisher hatte ich die globalen Variablen in einer header-Datei, die Funktionsprototypen ebenfalls, zudem die Funktionen in einzelnen Quellcode-Dateien, das hat nicht funktioniert)

Ich hoffe meine Frage ist nicht allzu dumm, ich nirgendwo eine Antwort darauf gefunden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 16:16    Titel: Antworten mit Zitat

Du musst deinem Programm sagen, dass du die Variable benutzen willst, aber sie woanders vereinbart hast. Das geht mit dem Schlüsselwort "extern".

Header:
Code:

extern sprite monster[10];
extern sprite hero;
extern int score;

void UpdateMonsters();
void UpdateHero();


Und dann im entsprechenden Modul:
Code:

#include "foo.h"

sprite monster[10];
sprite hero;
int score = 0;

void UpdateMonsters()
{
...

..


Somit kannst du in allen Modulen, in denen du den Header inkludierst auf die Globalen und Funktionen zugreifen. Hoffe das war verständlich, ich bin hundemüde. ;)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
llol.Alfain
Mini JLI'ler



Anmeldedatum: 02.05.2003
Beiträge: 6

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 17:36    Titel: Antworten mit Zitat

Also entweder habe ich das Missverstanden oder ich bin auch zu müde.

Ich hab deine Variante erst an meinem Windows Programm versucht, hat nciht geklappt, danach an einem von dem JLI-Beispielen, weil ich dachte, ich hätte noch mehr Fehler gemacht, auch nichts.
Nun hab ich ein simpel-c++ Programm geschrieben, aber selbst da geht es nicht.
Liegt das an mir?

head:

Code:

#include <iostream.h>
extern int i = 0;

void Funktion(void);



Quellcode 1:
Code:

#include "head.h"


void main(void)
{
   Funktion();
   i++;
   cout << i;
}



Quellcode2
Code:


#include "head.h"

void Funktion(void)
{
   
   i++;
}


Als Fehlermeldung kommt
main2.obj : error LNK2005: "int i" (?i@@3HA) bereits in main1.obj definiert
main2.obj : error LNK2005: "int i" (?i@@3HA) bereits in main1.obj definiert
Debug/extern.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden


Also im Prinzip dasselbe wie vorher.[/quote]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 17:48    Titel: Antworten mit Zitat

Japp, liegt an dir ;)

Erstmal darfst du die Variable so wie du es machst nicht initialisieren, da darf nur extern int i; stehen. Dann musst du die Variable auch noch in einem der Module(nicht in der Header-Datei!) anlegen. In deinem Fall:

Code:

#include <iostream.h>
extern int i;

void Funktion(void);

Code:

#include "head.h"

void main(void)
{
   Funktion();
   i++;
   cout << i;
}

Code:

#include "head.h"

int i = 0; // <-- HIER wird die Variable erst angelegt und initialisiert

void Funktion(void)
{
   
   i++;
}

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
llol.Alfain
Mini JLI'ler



Anmeldedatum: 02.05.2003
Beiträge: 6

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 17:51    Titel: Antworten mit Zitat

Juchu es liegt an mir Very Happy
Ich such seit heut morgen nach ner Lösung für dieses Problem und seh nur noch die Schriftzüge mehrfachinitialisierung und nichtaufgelöster externer Verweis vor mir Smile
Vielen Dank.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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