次の方法で共有


コンパイラの警告 (レベル 2) C4150

'type' 型を削除するため delete 演算子が呼び出されましたが、定義がありません

delete 演算子は、宣言された一方で定義されていない型を削除するために呼び出されます。 定義が delete と同じ翻訳単位内にないため、コンパイラは呼び出すデストラクターを見つけることができません。

次の例では、class IncClass を宣言するが、定義していないため、C4150 が生成されます。

// compile with: /W2
class IncClass;

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

この問題を解決するには、IncClass の定義を delete と同じファイルに配置します。 クラスがヘッダー ファイルで宣言されている場合は、#include を使用してファイルに追加できます。 クラスがヘッダー ファイルで宣言されていない場合は、NoDestruct 関数定義を IncClass 定義と同じファイルに移動する必要がある場合があります。

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

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

同じファイル内のデストラクター呼び出しの後にクラスが定義されていると、C4150 が出力されます。 次の例では、IncClass は使用する前に宣言されていますが、delete の後に定義されています。

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

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

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

このシナリオでは、クラス定義の後に delete を使用する必要があります。

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

void NoDestruct( IncClass* pIncClass );

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

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

関連項目