Partager via


Avertissement du compilateur (niveau 2) C4150

suppression de pointeur vers type incomplet « type » ; aucun destructeur appelé

Remarques

L’opérateur delete est appelé pour supprimer un type déclaré mais non défini. Le compilateur ne trouve pas le destructeur à appeler, car la définition ne se trouve pas dans la même unité de traduction que le delete.

Exemple

L’exemple suivant génère l’erreur C4150 en déclarant, mais en ne définissant class IncClasspas :

// compile with: /W2
class IncClass;

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

Pour résoudre le problème, placez la définition du IncClass même fichier que le fichier delete. Si la classe est déclarée dans un fichier d’en-tête, elle peut être ajoutée au fichier à l’aide de #include. Si la classe n’est pas déclarée dans un fichier d’en-tête, la définition NoDestruct de la fonction peut avoir besoin d’être déplacée dans le même fichier que la définition IncClass.

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

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

C4150 est émis lorsque la classe est définie après l’appel du destructeur dans le même fichier. Dans l’exemple suivant IncClass, il est déclaré avant d’être utilisé, mais défini après delete :

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

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

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

Dans ce scénario, l’utilisation de delete doit être après la définition de classe.

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

void NoDestruct( IncClass* pIncClass );

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

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

Voir aussi