inline frage!



  • Hi,

    wenn ich sowas mache:

    // x.h
    
    inline void foo (char *x);
    
    // cpp.h
    inline void foo (char *x)
    {
        // mach was
    }
    

    ist dann die funktion bei der benutzung noch inline? oder nicht?



  • inliner schrieb:

    wenn ich sowas mache:

    // x.h
    
    inline void foo (char *x);
    
    // cpp.h
    inline void foo (char *x)
    {
        // mach was
    }
    

    ist dann die funktion bei der benutzung noch inline? oder nicht?

    Eine Funktion kann nur dort inline-expandiert werden, wo ihre *Definition* sichtabr ist. Das ist der Grund, warum inline-Funktionen normalerweise in Headern definiert werden.

    Wenn du in foo.cpp nur x.h, nicht aber cpp.h einbindest, kann in foo.cpp foo nicht inline-expandiert werden.
    In diesem Fall brauchst du eine out-of-line Definition von foo. Ohne eine solche wirst du einen Linkerfehler erhalten.


Anmelden zum Antworten