inlinefunktion -> fehlermeldung



  • Hallo Leute,

    Ich bitte um Eure Hilfe zu folgender Situation:

    - Ich habe eine Klasse in classe.h
    - deren funktionen in classe.c
    - sowie eine main.c

    Alles funktionierte Super, bis ich beschloss die GetMethoden mit "inline" zu bezeichnen. Da kammen linkerfehler. Daraufhin hab ich die inline getMethoden auch in classe.h ausgelagert. Auch dies hat nix gebracht 😞
    Das ganze teste ich unter Dev-Cpp

    Wo steckt der Fehler?

    Für Eure Antwort wäre ich Euch sehr dankbar 🙂

    Gruss



  • Hallo,

    du darfst inline Funktionen nicht auslagern, wenn sie auch von anderen Übersetzungseinheiten benutzt werden.
    Schreib die inline Funktionen entweder direkt in den Header:

    struct Foo {
      inline void bar() { 
        //mach was
      }
    };
    

    oder du machst sie eben nicht inline.

    Gab erst gestern einen ausführlichen Thread zu dem Thema...

    MfG

    GPC



  • Vielen Dank für Die schnelle Antwort 🙂 Ich hab den thread gefunden. Daraus entnehme ich, dass solche strukturierung richtig sein sollte:

    /* CTest.h */
    
    #ifndef CTEST_H
    #define CTEST_H
    
    class CTest
    {
        private:
          ...
          int zahl;
        public:
          ...
          inline int GetIrgendwas();
    };
    
    inline int CTest::GetIrgendwas()
    {
        return(this->zahl);
    }
    
    #endif /* CTEST_H */
    

    Leider kommt nach wie vor die meldung vom linker:
    [linker error] Undefined reference to CTest:GetIrgendwas()

    Ich hab auch schon einige andere combinationen versucht. Alles ohne Erfolg 😞

    Gruss



  • /* CTest.h */
    
    #ifndef CTEST_H
    #define CTEST_H
    
    class CTest {
          //...
          int zahl;
        public:
          //...
          inline int GetIrgendwas() const { return this->zahl; }
    };
    
    #endif /* CTEST_H */
    

    So müsste es eigentlich klappen.



  • Was du da zeigst sollte funktionieren.
    Mit VC hab ich schon öfter probleme gahabt wenn ich eine funktion auf inline umgestellt habe. Grund war dass manche module noch die nicht inline-versionen verwendet hatten.
    Abhilfe -> Rebuild all
    Kurt



  • ZuK schrieb:

    Was du da zeigst sollte funktionieren.
    Mit VC hab ich schon öfter probleme gahabt wenn ich eine funktion auf inline umgestellt habe. Grund war dass manche module noch die nicht inline-versionen verwendet hatten.
    Abhilfe -> Rebuild all
    Kurt

    Ja DAS WAR ES 😃
    Jetzt gehts 🙂 Vielen Dank Euch beiden für die umfangreiche Hilfe 🙂

    Gruss 🙂


Anmelden zum Antworten