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();
    
    #endif
    

    und 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 main
    

    das 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 status
    

    Kann 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 main
    

    sollte 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 lieber LIB_GLOBALS_H :
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39461.html



  • Oh, ok danke 🙂


Anmelden zum Antworten