最近在做项目的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中的成员不能有构造函数的更多相关文章

  1. C++类中的成员函数和构造函数为模板函数时的调用方法

    所谓模板函数其实就是建立一个通用函数,这个通用函数的形参类型不具体指定,用一个虚拟类型来代表,这个通用函数就被称为函数模板. 例: #include <iostream> using na ...

  2. C++中默认构造函数中数据成员的初始化

    构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员.即当类中的数据 ...

  3. C++中使用初始化列表比在构造函数中对成员变量赋值更高效

    这是在面试中遇到的一个问题,没有答出来,后来上网上查了一些资料,终于弄明白了: 一.首先c++标准规定成员变量必须在调用构造函数前进行初始化(这一点很重要) 二.如果我们在构造函数中对成员变量进行初始 ...

  4. union 中可以存储的是不带构造函数的类对象

    union 中可以存储的是不带构造函数的类对象 否则不符合逻辑 为什么不符合逻辑?

  5. 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话(初始化列表中无法直接初始化基类的数据成员,所以你需要在列表中指定基类的构造函数)

    最近有点忙,先发一篇我公众号的文章,以下是原文. /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行QWidget(parent) ...

  6. C++中虚继承派生类构造函数的正确写法

    最近工作中某个软件功能出现了退化,追查下来发现是一个类的成员变量没有被正确的初始化.这个问题与C++存在虚继承的情况下派生类构造函数的写法有关.在此说明一下错误发生的原因,希望对更多的人有帮助. 我们 ...

  7. C++成员变量、构造函数的初始化顺序 [转]

    C++成员变量.构造函数的初始化顺序 一.C++成员变量初始化 1.普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行 2.static 静 ...

  8. 总结C++中取成员函数地址的几种方法

    这里, 我整理了4种C++中取成员函数地址的方法, 第1,2,4种整理于网上的方法, 第3种cdecl_cast是我自己想到的. 其中, 第4种(汇编)的方法不能在VC6上编译通过. 推荐使用第1,2 ...

  9. Java:【面向对象:类的定义,静态变量,成员变量,构造函数,封装与私有,this】

    本文内容: 什么是面对对象 类的定义与对象实例化 成员变量 成员变量的有效范围 成员变量的赋值 静态变量.方法与实例变量.方法 构造函数 封装与私有 this关键字 注:函数和方法是一样东西.[由于我 ...

随机推荐

  1. IC卡的传输协议(2)-块传输协议T=1【转】

    转自:http://bbs.ednchina.com/BLOG_ARTICLE_172024.HTM 2.4 块传输协议T=1 T=1协议中,在TAL和IC卡之间传送的命令.R-APDU和传输控制信息 ...

  2. js 触发LinkButton点击事件,执行后台方法

    页面 <asp:LinkButton ID="lbtButton" runat="server"  CssClass="lbtButton&qu ...

  3. Smith-Waterman算法及其Java实现

    Smith-Waterman算法是1981年Smith和Waterman提出的一种用来寻找并比较具有局部相似性区域的动态规划算法,很多后来的算法都是在该算法的基础上发展的.这是一种两序列局部比对算法, ...

  4. Flex slider参数详细

    $(window).load(function() { $('.flexslider').flexslider({ animation: "fade", //String: Sel ...

  5. MYSQL是什么?

    #转载请联系 数据库主要分为两大类,关系型数据库和非关系型数据库.MYSQL是关系型数据库. 一.什么是关系型数据库呢? 1.关系型数据库,本质上是使用一张二维表来表示关系,和Excel表类似. 2. ...

  6. Selenium2+python自动化51-unittest简介【转载】

    前言 熟悉java的应该都清楚常见的单元测试框架Junit和TestNG,这个招聘的需求上也是经常见到的.python里面也有单元测试框架-unittest,相当于是一个python版的junit. ...

  7. .net core 2.0 报错:error NU1102: Unable to find package ...

    原文地址:传送门 这种是nuget无法还原的问题.解决问题的方法: 在项目文件所在的目录下创建文件:NuGet.Config 里面内容: <?xml version="1.0" ...

  8. Java基础:异常机制

    最近开始了找工作的面试,在面试过程中,面试官问了关于Java当中的异常处理机制,一直以来,无论写代码还是看书,自己对异常处理这一块就没有很好的重视过,对它的认知也仅仅停留在通过Try-catch去进行 ...

  9. 山东省第七届省赛 D题:Swiss-system tournament(归并排序)

    Description A Swiss-system tournament is a tournament which uses a non-elimination format. The first ...

  10. 使用moneykey对APP进行健壮性测试

    注意:moneykey对app按钮伪随机点击,只能测试app稳定性和健壮性,无法进行常规测试 1.安装 A.jdk(不详细介绍) B.安装配置android配置环境:Android Studio 此环 ...