使用Union 出错???急救!!!

cdwy411 2004-10-19 04:10:59
class CTest
{
public:
class Cls_tt
{
public:
print(){} ;
private:
long i ;
};

struct Stru_tt
{
long i
long j
};
union{
Cls_tt t1 ;
Stru_tt t2 ;
};
};

为什么会出现错误:
e:\test.h(148) : error C2620: union '__unnamed' : member 't1' has user-defined constructor or

non-trivial default constructor
这种情况该怎么用???
...全文
449 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdwy411 2004-10-20
  • 打赏
  • 举报
回复
谢谢 lynnboy(lynnboy) ( ) ,正如你所说,接分!!!
dot99 2004-10-20
  • 打赏
  • 举报
回复
member 't1' has user-defined constructor or non-trivial default constructor
写清楚了啊~~~~~

union来组织数据的,你却放了一个类进去~
carylin 2004-10-19
  • 打赏
  • 举报
回复
不同意楼楼上的,
pongba 2004-10-19
  • 打赏
  • 举报
回复
你用的什么编译器,代码没有错误
lynnboy 2004-10-19
  • 打赏
  • 举报
回复
non-trivial default constructor 就是编译器为需要生成默认构造函数的类生成的构造函数。
如果程序员没有给类提供任何构造函数,C++ 语言仍然要保证对象语义的正确性。当创建一个类的对象后,这个对象一定是语义上完整的该类的对象。
C++ 把最简单的类处理为与 C 的 struct 行为一致:新建的类对象直接在运行栈或堆中分配内存,对内存的内容不作任何操作。这个行为是一种逻辑上的“空构造函数”,被 C++ 标准成为 trivial default constructor,这种“最简单的类”的行为称为 bitwise,就是位语义。
当编译器认为一个类通过这种方式不能保证对象语义时,就会为类合成一个默认构造函数,这就是 non-trivial default constructor。
什么情况时一个类不能保证它的位语义呢?就是对象的内部有不满足位语义的任何东西存在的时候。具体来说,对象内部通常可能有三种东西:基类,成员,用于实现语言的其他东西,这个“用于实现语言的其他东西”通常就是为了实现 virtual 函数和基类的虚函数表指针 vptr。这个通常被分为四种情况,它们都会导致默认构造函数的合成:
1。如果类非 virtual 继承于任何有 public 或 protect (包括编译器合成的,但不是trivial的)默认构造函数的基类。当然,如果基类没有可调用的默认构造函数,则会导致合成失败。
2。如果类具有任何有 public (包括编译器合成的,但不是trivial的)默认构造函数的类对象成员。
3。如果类具有虚函数,则这个类具有 vptr,此时类的(如果有基类,则相应基类的)vptr 必须指向正确的 vtbl。
4。如果类 virtual 继承于任何虚基类,则该类具有 vptr(大多数 C++ 编译器在 vtbl 种保存虚基类的偏移量,这时类具有 vptr;有些 C++ 编译器在类中直接保存虚基类指针),vptr 必须指向正确的 vtbl(虚基类指针同样要求正确初始化)。
如果一个类定义没有用户定义构造函数,并且满足如上条件中的任何一条,都需要合成一个 non-trivial default constructor。在该合成的构造函数中完成的操作是对每一个基类和成员按声明顺序调用其默认构造函数(如果某个基类或成员是 bitwise 的,则不作操作),并在这个过程中适当的时候对 vptr 等指针作适当的初始化。(而这个“适当的时候”和“适当的初始化”所遵循的原则仍然是“保证对象语义”。)
lynnboy 2004-10-19
  • 打赏
  • 举报
回复
union 定义有一定的限制:作为 union 的成员的类型,不能有构造函数。
这个是保持基于对象模型的语义的直接逻辑结果。
我们可以考虑,union 的语义是“是类型A,也是类型B……”:
union U{
A a;
B b;
} u;
如果我们访问 u 的成员:
u.a; // 这是一个A
u.b; // 这是一个B
在语义上,u.a 就是一个类型 A 的对象,同样,u.b 就是一个类型 B 的对象。
可是,如果类型 A 或 B 有构造函数,也就意味着没有实施构造函数的该类型对象是无效的,违反对象语义。另一方面,我们又不能每次访问 union 内的对象时都调用构造函数,所以 C++ 标准禁止 union 成员具有构造函数。
cdwy411 2004-10-19
  • 打赏
  • 举报
回复
对不起,以上错误是我写的笔误.
不知道大家关心"member 't1' has user-defined constructor or non-trivial
default constructor"这个错误吗?
我现在寻求 MSDN 上错误码为" C2620" 的这个错误的解法.
请大家不要叫我改该定义的结构,谢谢!!!
pacman2000 2004-10-19
  • 打赏
  • 举报
回复
没什么问题,除了上面说的少了;和函数定义没写全。
柯本 2004-10-19
  • 打赏
  • 举报
回复
如果你用gcc,必须定义:

int print() { return 0;} ;


void print() {} ;

其它没问题,我用vc,bcb,gcc编译通过

柯本 2004-10-19
  • 打赏
  • 举报
回复

class CTest
{
public:
class Cls_tt
{
public:
print() { return 0;} ;
private:
long i ;
};

struct Stru_tt
{
long i ; // 少;
long j ; // 少;
};
union{
Cls_tt t1 ;
Stru_tt t2 ;
};
};

kobefly 2004-10-19
  • 打赏
  • 举报
回复
可以这么改:
union name{
Cls_tt t1 ;
Stru_tt t2 ;
};
或者
union nameT{
Cls_tt t1 ;
Stru_tt t2 ;
}name;
上边的是一个类型
下边的name是一个公用体的实例
kobefly 2004-10-19
  • 打赏
  • 举报
回复
union{
Cls_tt t1 ;
Stru_tt t2 ;
};
结构体没有命名啊!!
icymirror 2004-10-19
  • 打赏
  • 举报
回复
错误信息提示你联合体没有命名。
内容提要 本书全面深入地介绍了MySQL的功能,主要内容包括MySQL、PHP、Apache、Perl等组件的安装与功能简介,mysql等一些重要系统管理工具和用户操作界面的使用,MySQL数据库系统设计的基础知识与用不同语言设计MySQL数据库的过程,以及SQL语法、工具、选项、API应用指南,最大限度地帮助读者更快地学习和掌握MySQL数据库系统的设计和使用。本书覆盖了MySQL 5.0,讨论了新的程序设计接口(如PHP 5里的mysqli)和新的系统管理工具。 本书是MySQL数据库管理员和开发人员的必备参考书。 目录 第一部分 入门  第1章 什么是MySQL   1.1 什么是数据库   1.2 MySQL   1.3 MySQL的不足   1.4 MySQL的版本编号   1.5 MySQL的许可证   1.6 MySQL软件的替代品   1.7 小结  第2章 测试环境   2.1 是Windows还是UNIX/Linux   2.2 在Windows系统上安装MySQL和相关软件   2.3 在SUSE Linux 9.3系统上安装MySQL和相关软件   2.4 在Red Hat Enterprise Linux 4系统上安装MySQL和相关软件   2.5 编译MySQL软件的开发者版本(Linux)   2.6 配置Apache   2.7 配置PHP   2.8 配置MySQL  第3章 初级案例研究:MySQL+PHP   3.1 概述   3.2 数据库的开发   3.3 调查问卷   3.4 问卷调查结果的处理和显示   3.5 改进意见 第二部分 管理工具和用户操作界面  第4章 mysql、mysqladmin和mysqldump   4.1 mysql   4.2 mysqladmin   4.3 mysqldump  第5章 MySQL Administrator和MySQL Query Browser   5.1 安装   5.2 与MySQL服务器建立连接   5.3 MySQL Administrator   5.4 MySQL Query Browser  第6章 phpMyAdmin   6.1 phpMyAdmin的安装与配置   6.2 用户管理,保护MySQL   6.3 创建和编辑数据库   6.4 查看、插入和编辑数据   6.5 执行SQL命令   6.6 导入和导出   6.7 服务器管理   6.8 辅助功能  第7章 Microsoft Office和OpenOffice/StarOffice   7.1 安装Connector/ODBC   7.2 Microsoft Access   7.3 Microsoft Excel   7.4 安装Connector/J   7.5 OpenOffice/StarOffice Base   7.6 OpenOffice/StarOffice的Data Source视图 第三部分 基础知识  第8章 数据库设计概论   8.1 参考读物   8.2 数据表类型   8.3 MySQL数据类型   8.4 数据库设计技巧   8.5 规范化   8.6 层次关系的处理   8.7 关系   8.8 主键和外键   8.9 索引   8.10 视图   8.11 示例数据库mylibrary(图书管理)   8.12 示例数据库myforum(网上论坛)   8.13 示例数据库exceptions(用于特殊情况的测试)  第9章 SQL语言入门   9.1 简介   9.2 简单查询(SELECT)   9.3 对查询结果进行排序(ORDER BY)   9.4 筛选数据记录(WHERE,HAVING)   9.5 涉及多个数据表的关联查询(LEFT/RIGHT JOIN)   9.6 合并查询结果(UNION)   9.7 分组查询,统计函数(GROUP BY)   9.8 修改数据(INSERT、UPDATE和DELETE)   9.9 创建数据表、数据库和索引  第10章 SQL解决方案   10.1 字符串   10.2 日期和时间   10.3 ENUM和SET数据类型   10.4 变量与条件表达式(IF、CASE)   10.5 在数据表间复制数据   10.6 统计报表   10.7 子查询   10.8 保证数据的一致性   10.9 找出冗余的数据记录   10.10 数据表设计方案的改进   10.11 对前n条或后n条记录进行处理   10.12 以随机方式选择数据记录   10.13 全文索引   10.14 锁定   10.15 事务  第11章 访问权限与信息安全   11.1 简介   11.2 急救   11.3 访问控制机制的内部工作原理   11.4 访问权限的设置工具   11.5 MySQL 4.1版本开始的安全密码验证   11.6 建立连接的问题   11.7 系统安全性  第12章 GIS函数   12.1 GIS数据格式   12.2 MySQL的GIS实现   12.3 SQL示例(冰川数据库)   12.4 SQL示例(opengeodb数据库)  第13章 存储过程和触发器   13.1 为什么要使用存储过程和触发器   13.2 初识SP   13.3 SP的实现   13.4 SP的管理   13.5 SP的语法和语言元素   13.6 SP应用示例   13.7 触发器  第14章 管理与服务器配置   14.1 基础知识   14.2 备份   14.3 数据库的迁移   14.4 导出和导入文本文件   14.5 日志   14.6 镜像机制   14.7 管理MyISAM数据表   14.8 InnoDB数据表的管理   14.9 MySQL服务器的优化   14.10 ISP数据库管理 第四部分 程序设计  第15章 PHP   15.1 mysql功能模块   15.2 mysqli的类、方法和属性   15.3 把数据库功能打包为一个类   15.4 把SELECT查询结果显示为一个表格   15.5 字符串、日期、时间、BLOB和NULL   15.6 向关联数据表插入新数据记录   15.7 处理来自HTML表单的输入数据   15.8 分页显示查询结果   15.9 处理层次化数据   15.10 速度优化   15.11 Unicode   15.12 二进制数据(BLOB)和图像   15.13 存储过程   15.14 SP Administrator  第16章 Perl   16.1 编程技巧   16.2 示例:删除无效的数据记录(mylibrary)   16.3 CGI示例:图书管理(mylibrary)   16.4 CGI Unicode示例  第17章 Java(JDBC和Connector/J)   17.1 基础知识   17.2 程序设计技巧  第18章 C语言   18.1 MySQL C API(libmysqlclient)   18.2 Hello,World   18.3 与MySQL服务器建立连接   18.4 执行SQL命令   18.5 处理二进制数据和特殊字符   18.6 出错处理  第19章 Visual Basic 6/VBA   19.1 基础知识和术语   19.2 Connector/ODBC选项   19.3 ADO程序设计与Visual Basic 6/VBA   19.4 与MySQL服务器建立连接   19.5 转换器:从Microsoft SQL Server到MySQL   19.6 VBMySQLDirect  第20章 Visual Basic .NET和C#   20.1 ADO .NET与MySQL之间的通信   20.2 编程技巧   20.3 示例:把新图书记录存入mylibrary数据库   20.4 示例:把图像文件存入和读出一个BLOB数据列 第五部分 参考资料  第21章 SQL语法指南   21.1 语法   21.2 操作符   21.3 变量和常数   21.4 MySQL数据类型   21.5 SQL命令汇总表(按功能分类)   21.6 SQL命令指南(按字母表顺序排列)   21.7 SQL函数指南   21.8 GIS数据类型与GIS函数   21.9 与存储过程和触发器有关的语言元素  第22章 MySQL工具和选项   22.1 概述   22.2 通用选项和配置文件   22.3 mysqld程序(服务器)   22.4 mysqld_safe脚本(启动MySQL服务器)   22.5 mysql_install_db脚本(安装mysql数据库)   22.6 mysql_fix_privileges脚本(更新mysql数据库)   22.7 mysql_fix_extensions脚本(重命名MyISAM文件)   22.8 mysql程序(SQL命令解释器)   22.9 mysqladmin程序(日常管理)   22.10 mysqldump程序(数据的备份/导出)   22.11 mysqlimport程序(文本导入、批量导入)   22.12 mysqlshow程序(查看信息)   22.13 myisamchk程序(修复MyISAM文件)   22.14 myisampack程序(压缩MyISAM文件)  第23章 MySQL API应用指南   23.1 PHP API(mysql接口)   23.2 PHP API(mysqli接口)   23.3 Perl DBI   23.4 JDBC(Connector/J)   23.5 ADO .NET(Connector/Net)   23.6 C API 第六部分 附录  附录A 术语解释  附录B 本书的配套示例文件  附录C 参考书目
内容提要 -------------------------------------------------------------------------------- 本书全面深入地介绍了MySQL的功能,主要内容包括MySQL、PHP、Apache、Perl等组件的安装与功能简介,mysql等一些重要系统管理工具和用户操作界面的使用,MySQL数据库系统设计的基础知识与用不同语言设计MySQL数据库的过程,以及SQL语法、工具、选项、API应用指南,最大限度地帮助读者更快地学习和掌握MySQL数据库系统的设计和使用。本书覆盖了MySQL 5.0,讨论了新的程序设计接口(如PHP 5里的mysqli)和新的系统管理工具。   本书是MySQL数据库管理员和开发人员的必备参考书。 目录 -------------------------------------------------------------------------------- 第一部分 入门  第1章 什么是MySQL   1.1 什么是数据库   1.2 MySQL   1.3 MySQL的不足   1.4 MySQL的版本编号   1.5 MySQL的许可证   1.6 MySQL软件的替代品   1.7 小结  第2章 测试环境   2.1 是Windows还是UNIX/Linux   2.2 在Windows系统上安装MySQL和相关软件   2.3 在SUSE Linux 9.3系统上安装MySQL和相关软件   2.4 在Red Hat Enterprise Linux 4系统上安装MySQL和相关软件   2.5 编译MySQL软件的开发者版本(Linux)   2.6 配置Apache   2.7 配置PHP   2.8 配置MySQL  第3章 初级案例研究:MySQL+PHP   3.1 概述   3.2 数据库的开发   3.3 调查问卷   3.4 问卷调查结果的处理和显示   3.5 改进意见 第二部分 管理工具和用户操作界面  第4章 mysql、mysqladmin和mysqldump   4.1 mysql   4.2 mysqladmin   4.3 mysqldump  第5章 MySQL Administrator和MySQL Query Browser   5.1 安装   5.2 与MySQL服务器建立连接   5.3 MySQL Administrator   5.4 MySQL Query Browser  第6章 phpMyAdmin   6.1 phpMyAdmin的安装与配置   6.2 用户管理,保护MySQL   6.3 创建和编辑数据库   6.4 查看、插入和编辑数据   6.5 执行SQL命令   6.6 导入和导出   6.7 服务器管理   6.8 辅助功能  第7章 Microsoft Office和OpenOffice/StarOffice   7.1 安装Connector/ODBC   7.2 Microsoft Access   7.3 Microsoft Excel   7.4 安装Connector/J   7.5 OpenOffice/StarOffice Base   7.6 OpenOffice/StarOffice的Data Source视图 第三部分 基础知识  第8章 数据库设计概论   8.1 参考读物   8.2 数据表类型   8.3 MySQL数据类型   8.4 数据库设计技巧   8.5 规范化   8.6 层次关系的处理   8.7 关系   8.8 主键和外键   8.9 索引   8.10 视图   8.11 示例数据库mylibrary(图书管理)   8.12 示例数据库myforum(网上论坛)   8.13 示例数据库exceptions(用于特殊情况的测试)  第9章 SQL语言入门   9.1 简介   9.2 简单查询(SELECT)   9.3 对查询结果进行排序(ORDER BY)   9.4 筛选数据记录(WHERE,HAVING)   9.5 涉及多个数据表的关联查询(LEFT/RIGHT JOIN)   9.6 合并查询结果(UNION)   9.7 分组查询,统计函数(GROUP BY)   9.8 修改数据(INSERT、UPDATE和DELETE)   9.9 创建数据表、数据库和索引  第10章 SQL解决方案   1

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧