Freigeben über


Compilerwarnung (Ebene 2) C4150

Löschen eines Zeigers auf den unvollständigen Typ „type“. Kein Destruktor aufgerufen.

Bemerkungen

Der delete-Operator wird aufgerufen, um einen Typ zu löschen, der zwar deklariert, aber nicht definiert wurde. Der Compiler kann den aufrufbaren Destruktor nicht finden, da sich die Definition nicht in derselben Übersetzungseinheit wie die delete befindet.

Beispiel

Im folgenden Beispiel wird C4150 erzeugt, indem class IncClass deklariert, aber nicht definiert wird:

// compile with: /W2
class IncClass;

void NoDestruct( IncClass* pIncClass )
{
   delete pIncClass; // C4150
}

Um das Problem zu beheben, legen Sie die Definition von IncClass in dieselbe Datei wie die delete. Wenn die Klasse in einer Headerdatei deklariert wird, kann sie der Datei mithilfe von #include hinzugefügt werden. Wenn die Klasse nicht in einer Headerdatei deklariert ist, muss die Funktionsdefinition NoDestruct möglicherweise in dieselbe Datei wie die IncClass-Definition verschoben werden.

// compile with: /W2
#include "IncClass.h"

void NoDestruct( IncClass* pIncClass )
{
   delete pIncClass;
}

C4150 wird ausgegeben, wenn die Klasse nach dem Destruktoraufruf in derselben Datei definiert wird. Im folgenden Beispiel wird IncClass vor der Verwendung deklariert, aber nach delete definiert:

// C4150.cpp
// compile with: /W2
class IncClass;

void NoDestruct( IncClass* pIncClass )
{
   delete pIncClass; // C4150
}

class IncClass
{
public:
    IncClass() = default;
    ~IncClass() = default;
};

In diesem Szenario muss die Verwendung von delete nach der Klassendefinition erfolgen.

// C4150.cpp
// compile with: /W2
class  IncClass;

void NoDestruct( IncClass* pIncClass );

class IncClass
{
public:
    IncClass() = default;
    ~IncClass() = default;
};

void NoDestruct( IncClass* pIncClass )
{
   delete pIncClass;
}

Weitere Informationen