|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
llol.Alfain Mini JLI'ler
Anmeldedatum: 02.05.2003 Beiträge: 6
Medaillen: Keine
|
Verfasst am: 11.05.2003, 15:58 Titel: Globale Variablen bei Modulen |
|
|
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 11.05.2003, 16:16 Titel: |
|
|
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 |
|
|
llol.Alfain Mini JLI'ler
Anmeldedatum: 02.05.2003 Beiträge: 6
Medaillen: Keine
|
Verfasst am: 11.05.2003, 17:36 Titel: |
|
|
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 11.05.2003, 17:48 Titel: |
|
|
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 |
|
|
llol.Alfain Mini JLI'ler
Anmeldedatum: 02.05.2003 Beiträge: 6
Medaillen: Keine
|
Verfasst am: 11.05.2003, 17:51 Titel: |
|
|
Juchu es liegt an mir
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
Vielen Dank. |
|
Nach oben |
|
|
|
|
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
|