Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
exclusão do ponteiro para o tipo incompleto "type"; nenhum destruidor chamado
Observações
O operador delete é chamado para excluir um tipo que foi declarado, mas não definido. O compilador não consegue localizar o destruidor a ser chamado porque a definição não está na mesma unidade de tradução que a delete.
Exemplo
O exemplo a seguir gera C4150 declarando, mas não definindo class IncClass:
// compile with: /W2
class IncClass;
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass; // C4150
}
Para corrigir o problema, coloque a definição de IncClass no mesmo arquivo que o delete. Se a classe for declarada em um arquivo de cabeçalho, ela poderá ser adicionada ao arquivo usando #include. Se a classe não for declarada em um arquivo de cabeçalho, a definição da função NoDestruct poderá precisar ser movida para o mesmo arquivo que a definição de IncClass.
// compile with: /W2
#include "IncClass.h"
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass;
}
C4150 será emitido quando a classe for definida após a chamada do destruidor no mesmo arquivo. No exemplo a seguir, IncClass é declarado antes de ser usado, mas definido após o delete:
// C4150.cpp
// compile with: /W2
class IncClass;
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass; // C4150
}
class IncClass
{
public:
IncClass() = default;
~IncClass() = default;
};
Nesse cenário, o uso de delete precisa ser após a definição 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;
}