Linkfehler bei globalen Variablen
-
Hallo zusammen!
Bin Programmierneuling und eigentlich dachte ich, das mit dem verteilen auf mehrere Files über Header inzwischen ganz gut verstanden zu haben, doch nun tritt ein Linkfehler auf, den ich einfach nicht in den Griff bekommen.
Drei globale Variablen, die ich in einem Header vordeklariert hatte, sind in beiden Quelltextfiles nicht bekannt, obwohl der Header eingebunden wurde.
Das ganze sieht im Auszug etwa so aus:///////////// main.h #ifndef MAIN_H #define MAIN_H extern int width; extern int height; extern char window_title[]; #endif // MAIN_H //////////// init_and_quit.c #include "main.h" signed char init_opengl(int width, int height) { ... SDL_WM_SetCaption( window_title, NULL ); ... } //////////// main.c #include "main.h" #include "init_and_quit.h" int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) { width = 640; height = 480; strcpy(window_title, ""); ... }
Die Zeilen in den Funktionen werfen alle das "undefined reference" Problem auf.
Wär schön wenn ihr mir helfen könntet! Wenn ihr noch was braucht, sagt Bescheid, bin grad nur etwas unter Zeitdruck!Gruß,
Philipp
-
Und wo sind die Variablen definiert?
(Also ohne dem extern davor)
-
Bisher nirgendwo! Danke!
Ich hatte mir bisher keine Gedanken gemacht und das immer intuitiv richtig benutzt, aber gestern hatte ich den Wahn, ein "int width = 640;" in der main.c hätte auch nur dort eine Bedeutung.Für Links o.Ä. wie das Kompilieren und Linken so im Hintergrund funktioniert, bin ich übrigens immer dankbar. Ich war in letzter Zeit immer wieder überrascht, wie viel erst beim Linken passiert. Werde auch bald anfangen, Informatik zu studieren, von daher will ich schon in die Tiefe gehen...
Gruß,
Philipp
-
Ich sehe gerade, bei dem String funktioniert es nicht. Ich bekomme immer noch den undefined reference Error bei der Zeile
SDL_WM_SetCaption( window_title, NULL );
in der init_opengl-Funktion.
Den strcpy-Aufruf in der main-Funktion habe ich jetzt ersetzt mitchar window_title[] = "windau";
Ansonsten ist alles gleich geblieben, die Header-Datei binde ich natürlich auch mit ein. Hoffe, ihr wisst Rat!
Gruß,
PhilippPS/edit: Ich benutze übrigens Code::Blocks welches MinGW/gcc 4.4.1 mitbringt. Wenn ich mit der Maus in der Zeile mit dem Fehler auf die Variable gehe, zeigt er mir sogar den Namen so wie in der Deklaration benutzt an.
-
philipp2100 schrieb:
Den strcpy-Aufruf in der main-Funktion habe ich jetzt ersetzt mit
char window_title[] = "windau";
Dadurch definierst du eine lokale Variable Namens window_title in main()
Globale Variablen werden ausserhalb jeder Funktion definiert.
In den Dateien, in denen du Zugriff auf die Variablen möchtest, musst du diese mitextern
deklarieren.
-
OK, jetzt hab ichs. Danke vielmals!