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

    除特殊说明外,其余所有文章均属原创。未经允许,请勿进行转载或者其他操作 有问题欢迎留言交流
  • 相关阅读:
    使网页变灰的代码(包括FLASH等所有网页元素).
    技术面试问题回答
    Spring总结
    IE9插件差不多完成了
    通过dymamic简化Pinvoke调用
    shuffle算法的一种简易实现
    用Reactive Extensions快速实现鼠标手势功能
    编写递归调用的Lambda表达式
    Visual Studio 11 开发者预览版可以下载了
    关于获取所有排列方式的算法
  • 原文地址:https://www.cnblogs.com/LiuBingBlogs/p/8545541.html
Copyright © 2011-2022 走看看