B
Korbinian schrieb:
willst du immer noch eine funktion inline machen, so kennzeichnest du sie mit inline.
Das reicht nicht. Eine inline-Funktion kannst du nur aufrufen, wenn ihre Definition sichtbar ist, d.h. sich in derselben Übersetzungseinheit befindet. Das heißt in der Praxis, dass die inline-Funktion im Header stehen muss (es sei denn sie wird nur in der Implementierungsdatei der Klasse benutzt.)
SirLant schrieb:
Aber wo muss ich diese jetzt überall inkludieren?
Die Klassendefinition muss überall sichtbar sein, wo Interna der Klasse bekannt sein müssen. Das heißt z.b., wenn der Compiler die Größe braucht, wenn er den Konstruktor oder Destruktor aufrufen muss, wenn du Member benutzen willst sowieso etc. Eine einfache Deklaration der Klasse reicht aus, wenn:
class Foo;
// ...
Foo f(); // als Rückgabetyp in einer Deklaration
void g(Foo); // als Parametertyp in einer Deklaration
Foo *p, *q;
Foo & r; // wenn sie in einer Deklaration als Pointer oder Referenz auftaucht
p = q; // Pointer können auch zugewiesen werden (es ist aber keine Pointerarithmetik möglich)
extern Foo e; // extern Deklaration
tmpl<Foo> t; // als Template-Argument
Das ist wahrscheinlich keine erschöpfende Liste, aber alles was mir so einfällt.