zoukankan      html  css  js  c++  java
  • 错误 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类时要尽量避免成员变量是对象(含有自己的构造函数)。

    除特殊说明外,其余所有文章均属原创。未经允许,请勿进行转载或者其他操作 有问题欢迎留言交流
  • 相关阅读:
    图像的剪切
    DOS指令大全(二)
    扫描进程
    数据库名、数据库实例、全局数据库名、服务名、SID等的区别
    ORA29807: specified operator does not exist
    TCP/IP网络编程的几个网站
    漂在等待离职的日子(三)
    入职第一天
    入职一周
    漂在等待离职的日子(八)
  • 原文地址:https://www.cnblogs.com/LiuBingBlogs/p/8545541.html
Copyright © 2011-2022 走看看