Skip to content

Commit 9d8f4ce

Browse files
Merge pull request #5042 from MicrosoftDocs/main638521687153517277sync_temp
For protected branch, push strategy should use PR and merge to target branch method to work around git push error
2 parents c2c9412 + 5b294c8 commit 9d8f4ce

File tree

1 file changed

+63
-9
lines changed

1 file changed

+63
-9
lines changed
Lines changed: 63 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,84 @@
11
---
22
description: "Learn more about: Compiler Warning (level 2) C4150"
3-
title: "Compiler Warning (level 2) C4150"
3+
title: Compiler warning (level 2) C4150
44
ms.date: "11/04/2016"
55
f1_keywords: ["C4150"]
66
helpviewer_keywords: ["C4150"]
7-
ms.assetid: ff1760ec-0d9f-4d45-b797-94261624becf
87
---
98
# Compiler Warning (level 2) C4150
109

11-
deletion of pointer to incomplete type 'type'; no destructor called
10+
> deletion of pointer to incomplete type 'type'; no destructor called
1211
13-
The **`delete`** operator is called to delete a type that was declared but not defined, so the compiler cannot find a destructor.
12+
The `delete` operator is called to delete a type that was declared but not defined. The compiler can't find the destructor to call because the definition isn't in the same translation unit as the `delete`.
1413

15-
The following sample generates C4150:
14+
## Example
15+
16+
The following sample generates C4150 by declaring but not defining `class IncClass`:
1617

1718
```cpp
18-
// C4150.cpp
1919
// compile with: /W2
20-
class IncClass;
20+
class IncClass;
21+
22+
void NoDestruct( IncClass* pIncClass )
23+
{
24+
delete pIncClass; // C4150
25+
}
26+
```
27+
28+
To fix the issue, put the definition of `IncClass` in the same file as the `delete`. If the class is declared in a header file, it can be added to the file using `#include`. If the class isn't declared in a header file, the `NoDestruct` function definition may need to be moved into the same file as the `IncClass` definition.
29+
30+
```cpp
31+
// compile with: /W2
32+
#include "IncClass.h"
2133
2234
void NoDestruct( IncClass* pIncClass )
2335
{
2436
delete pIncClass;
25-
} // C4150, define class to resolve
37+
}
38+
```
39+
40+
C4150 will be emitted when the class is defined after the destructor call in the same file. In the following example `IncClass` is declared before being used, but defined after the `delete`:
41+
42+
```cpp
43+
// C4150.cpp
44+
// compile with: /W2
45+
class IncClass;
2646

27-
int main()
47+
void NoDestruct( IncClass* pIncClass )
2848
{
49+
delete pIncClass; // C4150
2950
}
51+
52+
class IncClass
53+
{
54+
public:
55+
IncClass() = default;
56+
~IncClass() = default;
57+
};
3058
```
59+
In this scenario, the use of `delete` needs to be after the class definition.
60+
```cpp
61+
// C4150.cpp
62+
// compile with: /W2
63+
class IncClass;
64+
65+
void NoDestruct( IncClass* pIncClass );
66+
67+
class IncClass
68+
{
69+
public:
70+
IncClass() = default;
71+
~IncClass() = default;
72+
};
73+
74+
void NoDestruct( IncClass* pIncClass )
75+
{
76+
delete pIncClass;
77+
}
78+
79+
```
80+
81+
## See also
82+
83+
* [Projects and build systems](../../build/projects-and-build-systems-cpp.md)
84+
* [Source files and source programs](../../c-language/source-files-and-source-programs.md)

0 commit comments

Comments
 (0)