错误 C2280 Union : 尝试引用已删除的函数 以及 警告 C4624 “Grade”: 已将析构函数隐式定义为“已删除”的一种解决方法

Union 是C/C++语言中的一种结构类型,用于定义可共享内存的数据变量的一种方式,初次使用Union联合体时可能会遇到以下问题:

 错误 C2280 Union : 尝试引用已删除的函数 

 警告 C4624 “Grade”: 已将析构函数隐式定义为“已删除”

不多说代码:

 1 // TemplateExe1.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 #include "atlstr.h"
 7 using namespace std;
 8 union Grade {
 9     int number;
10     CString mark;
11     bool pass;
12     
13 }uGrade;
14 int main()
15 {
16     uGrade.number = 90;
17     printf("%d",uGrade.number);
18     getchar();
19     
20     return 0;
21 }

此错误的原因:CString 是一个类,有自己的构造函数,析构函数。

解决方案:CString 换成基本的数据类型:char 等

我们分析一下:

Union的一大特征在于,一个Union类中的所有数据共享同一段内存。如果union类的成员包含自己的构造函数,析构函数,那么同一Union类的成员在初始化时,就有可能会执行不同的构造函数。这是无法预料的。所以,我们在定义Union类时要尽量避免成员变量是对象(含有自己的构造函数)。