Freigeben über


Fehlender Funktionsrumpf oder fehlende Variable

Wenn einfach nur ein Funktionsprototyp vorhanden ist, setzt der Compiler die Verarbeitung zwar ohne Fehler fort, der Linker ist jedoch nicht in der Lage, einen Aufruf einer Adresse aufzulösen, da kein Platz für den Funktionscode oder Variablen reserviert ist. Der Fehler tritt erst auf, wenn Sie einen Aufruf für eine Funktion erstellen, den der Linker auflösen muss.

Beispiel

Der Funktionsaufruf in main verursacht LNK2019, da der Prototyp es zulässt, dass der Compiler die Funktion als vorhanden betrachtet. Der Linker stellt dann fest, dass dies nicht der Fall ist.

// LNK2019_MFBV.cpp
// LNK2019 expected
void DoSomething(void);
int main() {
   DoSomething();
}

Stellen Sie unter C++ sicher, dass die Implementierung einer spezifischen Funktion für eine Klasse und nicht nur ein Prototyp in der Klassendefinition enthalten ist. Wenn Sie die Klasse außerhalb der Headerdatei definieren, sollten Sie außerdem darauf achten, dass der Klassenname vor der Funktion (Classname::memberfunction) aufgeführt ist.

// LNK2019_MFBV_2.cpp
// LNK2019 expected
struct A {
   static void Test();
};

// Should be void A::Test() {}
void Test() {}

int main() {
   A AObject;
   AObject.Test();
}

Siehe auch

Referenz

Linkertoolfehler LNK2019