Frage

Okay,

Hier ist, was ich versuche, ... Recht zu tun, jetzt ist es kompilieren aber versagt bei Verknüpfung ... LNK2001

Ich möchte die Methoden statisch, weil es keine Membervariablen sind jedoch wollen, dass sie ich inline auch für die speedups sie bieten.

Was ist der beste Weg, dies zu tun? Hier ist, was ich auf den Punkt gebracht haben:

/* foo.h */
class foo
{
    static void bar(float* in);
};

/* foo.cpp */
inline void foo::bar(float* in)
{
    // some dark magic here
}

Ich versuche, dies zu tun, weil ich gehen zu können, will:

foo::bar(myFloatPtr);

foo hat keine Membervariablen ... es macht keinen Sinn zu.

War es hilfreich?

Lösung

Wenn Sie bar von einem anderen CPP-Datei aufrufen, andere als foo.cpp, muss es in einer Header-Datei sein.

Andere Tipps

Als erstes würde ich sie in einem namespace setzen statt, denn es gibt überhaupt keine Logik in dieser "class". Zweitens können Sie die Funktionen Körper in der Header-Datei definiert werden direkt die Compiler, um sie sehen zu können. Andernfalls müssen Sie whole program optimization vom Linker getan werden für inlining diese Funktionen (AFAIK).

Sie müssen Ihre Inline-Funktion in der Header-Datei, keine separate Implementierung-Datei definiert werden. Die Definitionen benötigt werden, wenn die Header-Datei #include wird, wenn sie gehofft werden inlined, schließlich werden.

Der Verbindungsfehler Sie sehen werden, ist, weil die Deklaration (in der Header-Datei) nicht den Compiler darüber informieren, dass die Methode inline sein soll, während die Umsetzung inline, also nicht verfügbar für die Verbindung.

Im Allgemeinen inline-fähigen Funktionen implementiert werden, wo sie (in der Header-Datei) deklariert werden. Der Compiler ist frei Funktionen inline, wie Sie sie haben, aber Sie können nicht Kraft es etwas Inline. Wenn Sie Visual C ++ verwenden, aktivieren Sie "Inline jede geeignete", "Link-Zeitcodegenerierung" und "favorisieren schnellen Code".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top