inline Funktionen



  • grandpa schrieb:

    hm, wenn ich das "inline" aus der xyz.cpp wegnehme, kommt immer noch
    [Linker error] undefined reference to `xyz::printId() const'

    weil du nicht richtig linkst. Wie das geht, steht im Handbuch zu deiner Entwicklungsumgebung/Compiler.



  • rüdiger schrieb:

    grandpa schrieb:

    hm, wenn ich das "inline" aus der xyz.cpp wegnehme, kommt immer noch
    [Linker error] undefined reference to `xyz::printId() const'

    weil du nicht richtig linkst. Wie das geht, steht im Handbuch zu deiner Entwicklungsumgebung/Compiler.

    (Ich nehme Dev-C++)
    Wenn ich bei der Datei xyz.cpp aus den Optionen das Häckchen "Ins Linken einbeziehen" rausnehme, kommt noch zusätzlich:
    [Linker error] undefined reference to `xyz::xyz()'



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ne, du sollst die Datei ja ins linken einbeziehen. Bist du sicher, dass du in der Code-Datei die Methode so anlegst, wie sie deklariert ist?

    ansonsten zeig noch mal Code.



  • ok, mal alle 3 Dateien komplett

    // xyz.h
    class xyz {
        public: int id;
    
        xyz();
    
        void printId() const;
    };
    
    // xyz.cpp
    #include <iostream>
    
    #include "xyz.h"
    
    using namespace std;
    
    xyz::xyz(): id(1) {};
    
    inline void xyz::printId() const {
        cout << "id: " << id << endl;
    }
    
    // main.cpp
    #include <iostream>
    
    #include "xyz.h"
    
    using namespace std;
    
    int main()
    {
       xyz *test = new xyz();
       test->printId();
       system("PAUSE");
        return EXIT_SUCCESS;
    };
    


  • Schau Dir nochmal das Entweder-Oder Beispiel von GPC an. Die Definition der Inline-Methode hat im .cpp File nix verloren.



  • LordJaxom schrieb:

    Schau Dir nochmal das Entweder-Oder Beispiel von GPC an. Die Definition der Inline-Methode hat im .cpp File nix verloren.

    ich will das 2. Beispiel nehmen:

    // xyz.h
    class xyz {
        //...
    
        void printId() const;
    };
    
    //Explizit inline, aber außerhalb definiert
    inline void xyz::printId() const {
        cout << "id: " << id << endl;
    }
    

    Also das "inline" vor die implementierte Methode setzen und nicht vor die Deklaration in der Klasse und wieso die inplementierte Methode nicht in die cpp-Datei reinschreiben? Ich implementiere doch keine Methode in einer header-Datei, oder versteh ich ich das noch komplett falsch?



  • grandpa schrieb:

    Ich implementiere doch keine Methode in einer header-Datei, oder versteh ich ich das noch komplett falsch?

    Im Falle von inline (und templates) schon. Ich hatte dazu mal was geschrieben, guck mal in die FAQ vom C++-Forum, Topic "inline FAQ".



  • grandpa schrieb:

    Ich implementiere doch keine Methode in einer header-Datei, oder versteh ich ich das noch komplett falsch?

    Bei Templates wirst Du gar nicht drum rum kommen... sonst kannst Du Dein template nicht mehr verwenden 😉



  • thx


Anmelden zum Antworten