錯誤 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類時要盡量避免成員變量是對象(含有自己的構造函數)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM