Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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;
}