最近在做專案的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的定義:
classalljoynarray
確實是有乙個建構函式,看注釋「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有乙個但引數建...