union中的成員不能有建構函式

2022-03-02 18:56:38 字數 1378 閱讀 5972

最近在做專案的cta測試,快被折騰死了。。。。。 ~_~

專案中用到的開源庫alljoyn在編譯時報錯:

in file included from ./target/base/alljoyn/inc/alljoyn/message.h:36:0

,

from ./target/base/alljoyn/inc/alljoyn/authlistener.h:5

,

from ./data/../target/base/alljoyn/inc/alljoyn/busattachment.h:37

,

from ./data/sutheader.h:306

,

from ./data/data_caster.h:1

,

from ./data/stubmacrodefine.h:5

,

from ./ctatestdriverheader.h:9

,

from target/externmethod_stub.cpp:1

:./target/base/alljoyn/inc/alljoyn/msgarg.h:284:15: error: member 『ajn::alljoynarray ajn::msgarg::::v_array』 with constructor not allowed in

union

exception: error status

1from /usr/local/bin/g++make: *** [target/externmethod_stub.o] error 1

編譯器報錯是ajn::msgarg中的成員v_array(ajn::alljoynarray)不應該有建構函式。

知識點:

以前還不知道這個(因為很少用union),更多的解釋請看這裡:

但這是開源庫,之前單獨編譯都沒問題啊。於是開啟原始碼檢視ajn::alljoynarray的定義:

class

alljoynarray

確實是有乙個建構函式,看注釋「compiler generated constructor」似乎是cta自動插入的。於是對比一下alljoyn的原始**,果然如此。

坑爹呀。。。。

既然知道原因,解決起來很簡單:

cta自動插入的建構函式alljoynarray::alljoynarray()去掉即可。

ps:最後再說一句cta測試真是坑爹玩意,已經被它折磨了好幾天,說多了都是淚呀!

為什麼C 不能有虛建構函式,卻可以有虛析構函式

class b class d public b 有天參加某大公司筆試,遇到這個問題,回來重新翻看c 教材和網上找答案,才恍然大悟。答案如下 c 的動態繫結使用vtable 虛成員函式表 來實現。vtable支援執行時查詢,使系統可以將某一函式名繫結到vtable的特定入口位址。例如上段 的虛函式表...

為什麼C 不能有虛建構函式,卻可以有虛析構函式

class b class d public b 1.從儲存空間角度,虛函式對應乙個指向vtable虛函式表的指標,這大家都知道,可是這個指向vtable的指標其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtable來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有...

在C 中,為什麼建構函式不能有返回值?

1 假設有乙個類c,有如下定義 class c c int i x i private int x 如果c的建構函式可以有返回值,比如int int c x 0 那麼下列 會發生什麼事呢?c c c 此時c.x 1!很明顯,c 呼叫了c的無引數建構函式。該建構函式返回int值1。恰好c有乙個但引數建...