Dela via


Kompilatorvarning (nivå 2) C4150

borttagning av pekaren till ofullständig typ "typ". ingen destructor anropad

Anmärkningar

Operatorn delete anropas för att ta bort en typ som har deklarerats men inte definierats. Kompilatorn kan inte hitta destruatorn som ska anropas eftersom definitionen inte finns i samma översättningsenhet som delete.

Example

I följande exempel genereras C4150 genom att deklarera men inte definiera class IncClass:

// compile with: /W2
class IncClass;

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

Åtgärda problemet genom att placera definitionen av IncClass i samma fil som delete. Om klassen deklareras i en rubrikfil kan den läggas till i filen med hjälp av #include. Om klassen inte deklareras i en rubrikfil kan funktionsdefinitionen NoDestruct behöva flyttas till samma fil som IncClass definitionen.

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

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

C4150 genereras när klassen definieras efter destructor-anropet i samma fil. I följande exempel IncClass deklareras innan det används, men definieras efter delete:

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

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

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

I det här scenariot måste användningen av delete vara efter klassdefinitionen.

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

void NoDestruct( IncClass* pIncClass );

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

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

Se även