union中的成员不能有构造函数
最近在做项目的CTA测试,快被折腾死了。。。。。 ~_~
项目中用到的开源库AllJoyn在编译时报错:
In file included from ./Target/base/AllJoyn/Inc/alljoyn/Message.h::,
from ./Target/base/AllJoyn/Inc/alljoyn/AuthListener.h:,
from ./Data/../Target/base/AllJoyn/Inc/alljoyn/BusAttachment.h:,
from ./Data/SUTHeader.h:,
from ./Data/Data_Caster.h:,
from ./Data/StubMacroDefine.h:,
from ./CTATestDriverHeader.h:,
from Target/ExternMethod_stub.cpp::
./Target/base/AllJoyn/Inc/alljoyn/MsgArg.h::: error: member ‘ajn::AllJoynArray ajn::MsgArg::<anonymous union>::v_array’ with constructor not allowed in union
Exception: error status from /usr/local/bin/g++
make: *** [Target/ExternMethod_stub.o] Error
编译器报错是ajn::MsgArg中的成员v_array(ajn::AllJoynArray)不应该有构造函数。
知识点:
- c++的union中数据成员是不允许有构造函数的
以前还不知道这个(因为很少用union),更多的解释请看这里:http://blog.chinaunix.net/uid-27661220-id-3346412.html
但这是开源库,之前单独编译都没问题啊。于是打开源码查看ajn::AllJoynArray的定义:
class AllJoynArray {
public:
AllJoynArray();// compiler generated constructor
CTA_PRIVATE: bool _m_bCTAStubVariable_;
...
}
确实是有一个构造函数,看注释“compiler generated constructor”似乎是CTA自动插入的。于是对比一下AllJoyn的原始代码,果然如此。
坑爹呀。。。。
既然知道原因,解决起来很简单:
CTA自动插入的构造函数AllJoynArray::AllJoynArray()去掉即可。
ps:
最后再说一句CTA测试真是坑爹玩意,已经被它折磨了好几天,说多了都是泪呀!
union中的成员不能有构造函数的更多相关文章
- C++类中的成员函数和构造函数为模板函数时的调用方法
所谓模板函数其实就是建立一个通用函数,这个通用函数的形参类型不具体指定,用一个虚拟类型来代表,这个通用函数就被称为函数模板. 例: #include <iostream> using na ...
- C++中默认构造函数中数据成员的初始化
构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员.即当类中的数据 ...
- C++中使用初始化列表比在构造函数中对成员变量赋值更高效
这是在面试中遇到的一个问题,没有答出来,后来上网上查了一些资料,终于弄明白了: 一.首先c++标准规定成员变量必须在调用构造函数前进行初始化(这一点很重要) 二.如果我们在构造函数中对成员变量进行初始 ...
- union 中可以存储的是不带构造函数的类对象
union 中可以存储的是不带构造函数的类对象 否则不符合逻辑 为什么不符合逻辑?
- 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话(初始化列表中无法直接初始化基类的数据成员,所以你需要在列表中指定基类的构造函数)
最近有点忙,先发一篇我公众号的文章,以下是原文. /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行QWidget(parent) ...
- C++中虚继承派生类构造函数的正确写法
最近工作中某个软件功能出现了退化,追查下来发现是一个类的成员变量没有被正确的初始化.这个问题与C++存在虚继承的情况下派生类构造函数的写法有关.在此说明一下错误发生的原因,希望对更多的人有帮助. 我们 ...
- C++成员变量、构造函数的初始化顺序 [转]
C++成员变量.构造函数的初始化顺序 一.C++成员变量初始化 1.普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行 2.static 静 ...
- 总结C++中取成员函数地址的几种方法
这里, 我整理了4种C++中取成员函数地址的方法, 第1,2,4种整理于网上的方法, 第3种cdecl_cast是我自己想到的. 其中, 第4种(汇编)的方法不能在VC6上编译通过. 推荐使用第1,2 ...
- Java:【面向对象:类的定义,静态变量,成员变量,构造函数,封装与私有,this】
本文内容: 什么是面对对象 类的定义与对象实例化 成员变量 成员变量的有效范围 成员变量的赋值 静态变量.方法与实例变量.方法 构造函数 封装与私有 this关键字 注:函数和方法是一样东西.[由于我 ...
随机推荐
- 汉字hash问题(转)
一.汉字编码的种类 汉字编码中现在主要用到的有三类,包括GBK,GB2312和Big5. 1.GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆.新加坡等地也使用此编码.它 ...
- python清华大学镜像
pip安装的-i参数: https://pypi.tuna.tsinghua.edu.cn/simple conda 设置: conda config --add channels https://m ...
- SVN被锁定解决办法
转自:https://blog.csdn.net/strwangfan/article/details/78748393: 今天用SVN的时候出现被锁定的情况,既不能更新代码也不能提交. 解决方法如下 ...
- 运行HelloWorld.class是报错(错误: 找不到或无法加载主类 HelloWorld.class)
1.从毕业到现在工作了几个月了,每天都是在写一些js代码,感觉作为一个web程序员,java还是十分重要的,于是自己买了一本java书来边学边练习,然后发现自己连使用记事本来编写的HelloWorld ...
- opencv-写入AVI视频文件
#include <cv.h> #include <highgui.h> int main(int argc, char **argv) { CvCapture* captur ...
- 使用CreateRemoteThread把代码远程注入指定exe执行
由于本人也是新手,如果有朋友不懂windows api相关知识,我相信查阅书籍或者百度会比我说有帮助的多,下面就我所做简单复述一下过程,欢迎指正缺点. 效果图示如下: 做的这个例子首先是创建了一个MF ...
- 【转载】Linux中profile、bashrc、bash_profile之间的区别和联系
如果你想对所有的使用bash的用户修改某个配置并在以后打开的bash都生效的话可以修改这个文件,修改这个文件不用重启,重新打开一个bash即可生效.~/.bash_profile:每个用户都可使用该文 ...
- 欧拉函数O(sqrt(n))与欧拉线性筛素数O(n)总结
欧拉函数: 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. POJ 2407.Relatives-欧拉函数 代码O(sqrt(n)): ll euler(ll n){ ll ans=n; ...
- CF 1003B Binary String Constructing 【构造/找规律/分类讨论】
You are given three integers a, b and x. Your task is to construct a binary string s of length n=a+b ...
- 高效mysql的习惯(程序员版本)
高效的mysql 一定要有主键 如果没有主键: 数据多次读写后可能更离散,有更多随机I/O MySQL复制环境中,如果选择RBR模式,没有主键的update需要读全表,导致复制延迟 好的主键特点: 没 ...