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类时要尽量避免成员变量是对象(含有自己的构造函数)。

    除特殊说明外,其余所有文章均属原创。未经允许,请勿进行转载或者其他操作 有问题欢迎留言交流
  • 相关阅读:
    centos下修改hosts文件以及生效命令
    CentOS 7 上安装(LAMP)服务 Linux,Apache,MySQL,PHP
    sqlserver下载地址及密匙
    npm/gulp/nodejs
    sp_addlinkedserver 跨服务器连接数据库查询
    sql使用临时表循环
    nodejs和npm
    扫描输入后自动定位到下一个输入框
    Unable to load the specified metadata resource
    mysql保存乱码(C#)
  • 原文地址:https://www.cnblogs.com/LiuBingBlogs/p/8545541.html
Copyright © 2011-2022 走看看