inline methode



  • abend,
    wie mache ich eine methode inline, die ich in der quelldatei definiere?



  • inline void IR1337(){};
    


  • wenn ich das ganze so als methode definiere hagelt es undefinierte referenzen



  • Tja:

    1. Du machst etwas falsch
    2. Wenn Du Hilfe willst mßt Du schon ein bischen mehr preisgeben als: "Hagelt Fehler".



  • Definieren oder Deklarieren? Das ist hier die Frage.



  • krabbels schrieb:

    wenn ich das ganze so als methode definiere hagelt es undefinierte referenzen

    Die Definition (also der Code) einer inline-Methode muss in jeder Übersetzungseinheit, in der sie verwendet wird, verfügbar sein. Sie muss also in den Header.



  • das wusste ich nicht.
    dankeschön.



  • Gibts da nicht nen Trick?

    In meinem Buch steht, die Definition SOLLTE in der gleichen Datei stattfinden, also im Header.

    War da nicht mal irgendwas mit extern inline? *duck*

    MfG



  • extern und inline widerspricht sich ein wenig, findest du nicht auch? (bei externen Funktionen kennt der Compiler nur den Namen und kann deshalb nichts inline erweitern (der Linker erhält dann die komplette Funktion, aber der kümmert sich nicht mehr um Inlining), bei inline-Funktionen muß der Compiler die komplette Definition kennen, schon damit er einschätzen kann, ob sich das Inlinen lohnt).



  • CStoll schrieb:

    extern und inline widerspricht sich ein wenig, findest du nicht auch?

    Nope. extern und inline sind orthogonal zueinander. Genaugenommen ist jede Funktion, inklusive inline-Funktionen, per Default extern. extern legt fest, dass
    eine Funktion in mehr als einer Übersetzungseinheit benutzt werden kann. Das Gegenteil ist static und bedeutet eine eigenständige Definition pro Übersetzungseinheit. inline ändert die ODR und besagt, dass die Definition einmal pro Übersetzungseinheit stehen darf (muss).
    Sie muss aber in jeder Übersetzungseinheit *identisch* sein. Wie der Compiler (bzw. der Linker) dafür sorgt, dass es für eine normale (also extern) inline-Funktion am Ende nur eine Definition gibt, bleibt ihm überlassen.

    In früheren Tagen (vor C++98) waren inline-Funktionen per Default static, daher kommt wohl die Verwirrung.


Anmelden zum Antworten