unionのメンバーにはコンストラクション関数は使用できません
3484 ワード
最近プロジェクトのCTAテストをしていて、振り回されて死にそうです....
プロジェクトで使用されるオープンソースライブラリAllJoynは、コンパイル時にエラーが発生しました.
コンパイラエラーはajn::MsgArgのメンバーv_です.Array(ajn::AllJoynArray)には構造関数があるべきではありません.
知識点: c++のunionにおけるデータメンバーは、構造関数を許可しない である.
以前はまだこれを知りませんでした(unionは少ないので)、もっと多くの解釈はここを見てください:http://blog.chinaunix.net/uid-27661220-id-3346412.html
しかし、これはオープンソースライブラリで、これまで単独でコンパイルしても大丈夫だったでしょう.ソースコードを開いてajn::AllJoynArrayの定義を表示します.
確かに構造関数がありますが、注釈「compiler generated constructor」を見るとCTAが自動的に挿入したようです.そこでAllJoynの元のコードを比較すると、やはりそうです.
坑お父さん...
原因を知っている以上、解決は簡単です.
CTAが自動的に挿入するコンストラクション関数AllJoynArray::AllJoynArray()を削除すればよい.
ps:
最后にもう1つの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::<anonymous union>::v_array’ with constructor not allowed in union
Exception: error status 1 from /usr/local/bin/g++
make: *** [Target/ExternMethod_stub.o] Error 1
コンパイラエラーはajn::MsgArgのメンバーv_です.Array(ajn::AllJoynArray)には構造関数があるべきではありません.
知識点:
以前はまだこれを知りませんでした(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:
最后にもう1つのCTAテストは本当に穴のお父さんの游び物で、すでにそれに苦しめられて何日も、多く言ってすべて涙です!