Bedeutung inline
-
Hallöchen

Ich hab gehört, wenn ich Funktionen (die nur sehr kurz sind) direkt in der Header implementiere, dann werden diese automatisch "inline". Nun habe ich der Übersicht halber doch einmal alle Funktionen in die dazugehörige cc Datei geschrieben (auch wenn die Methode selbst nur eine Zeile Umfang besitzt) und wollte sie als inline definieren, also:
inline void Klasse::Methode()
{ /* ... */ }nun bekomme ich jedoch beim Kompilieren Fehlermeldungen. Wenn ich hingegen das inline vor der implementierung weg nehme, also:
void Klasse::Methode()
{ /* .. */ }dann funktioniert es wieder. Aus diesem Verhalten schlussfolgere ich, daß eine direkte Implementierung in einem Header nicht wirklich "inline" ist, oder?
mfg maddin
-
Hallo
in unserem Forummagazin ist auch ein Artikel über die Verwendung von inline.
bis bald
akari
-
Hi,
inline ist letztlich nur ein "Vorschlag" an den Compiler. Der wird dann, wenn möglich, deinen Code als "inline" umsetzen.
Da aber nicht jeder Code "geinlined" (tolles Wort :D) werden kann, besagt die Verwendung des Schlüsselwortes allein noch nicht viel.
-
-
ist richtig ... meine Frage ist nun die, ob eine direkte Implementierung innerhalb des Headers mit einer externen Implementierung mit einem "inline" (wenngleich auch nur als Vorschlag) davor gleichzusetzen ist.
mfg maddin
-
Nein - implizit als "inline" definiert werden nur Methoden, die du direkt IN einer Klassendeklaration ausschreibst.
(und inline-Definitionen außerhalb des Headers solltest du sowieso vermeiden, weil der Linker sie sonst womöglich nicht wiederfindet)
-
Ich arbeite gerade mal wieder mit VC6.
Der Linker findet so einiges nicht wieder. Und dabei hat er es auch noch selbst verzammelt....
-
Der Linker muß halt mit dem zurechtkommen, was ihm der Compiler da vorsetzt - und wenn der Compiler meint "das ist inline - das setze ich gleich direkt um", dann exisitert die Funktion nicht mehr als eigenständige Einheit in der Library (und ist für den Linker nicht mehr auffindbar).
-
okay, das ergibt Sinn ... jetzt ist mir auch klar, warum unser Proggi gesponnen hat, als wir das nachträglich ausserhalb des headers als inline deklariert haben

Danke für die Antworten
mfg maddin