Header Datei erfüllt nicht ihren Zweck
-
Hi,
ich meld mich auch mal wieder

Ich versuche gerade, auf der cli ein wenig zu programmieren und habe einmal folgendes Basisprogramm:
#include <iostream> #include "Library/Global.h" int main ( int argc, char * const argv[] ) { return init(); }Unter Library/Global.h findet man folgendes:
#ifndef __LIB_GLOBALS__ #define __LIB_GLOBALS__ #include <iostream> int init(); #endifund die dazugehörige Global.cpp im selben Verzeichnis:
#include "Global.h" #include <iostream> int init() { std::cout << "aaaa"; return 0; }Nun versuche ich via
g++ main.cpp -o maindas zu kompilieren und erhalte folgenden Fehler:
/tmp/ccCB2gOt.o: In function `main': main.cpp:(.text+0x6e): undefined reference to `init()' collect2: ld returned 1 exit statusKann mich jemand aufklären? Immo sollte die Funktion definiert sein

-
Und wie kompilierst du Global.cpp?
Oder meinst du der g++ hat einen Zaubermodus, mit dem er alle nötigen Implementierungsdateien findet?g++ main.cpp Global.cpp -o mainsollte es dann tun.
-
oh man... ok
wusst ich nicht, dachte, dass er jede einzelne Datei auf #include durchgeht 
danke
-
Nein, includes funktionieren anders. Die #include-Anweisung wird vom Preprozessor einfach durch den Inhalt der Datei ersetzt. Damit weiß der Linker aber immer noch nicht, wo er nun die Implementierung (bzw. Definition) für die Funktion findet (=>
undefined reference). Das musst du dem Linker noch extra mitteilen. (Das sind also zwei verschiedene Schritte!)btw.
__LIB_GLOBALS__ist schlecht nimm lieberLIB_GLOBALS_H:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39461.html
-
Oh, ok danke
