基本的に私はVisaMuxというクラスとMuxPathというクラスを持っています。 MuxPathには、VisaMuxプライベートインスタンス変数があります。私はMuxPathのコンストラクタに空のVisaMux()コンストラクタを呼び出さずに、インスタンス変数に与えられたVisaMuxオブジェクトを代入します。インスタンス変数をC++でコンストラクタを呼び出さずに代入する方法はありますか?
5 MuxPath::MuxPath(const uint& Clk_sel, const uint& Lane_sel, const VisaMux& Mux){
6 clk_sel = Clk_sel;
7 lane_sel = Lane_sel;
8 mux = Mux;
9 }
エラーでこのコードの結果:
MuxPath.cpp:5: error: no matching function for call to ‘VisaMux::VisaMux()’
VisaMux.h:20: candidates are: VisaMux::VisaMux(const std::string&, const uint&, const uint&, const std::vector<VisaLane, std::allocator<VisaLane> >&, const std::vector<VisaResource, std::allocator<VisaResource> >&)
は、あなたが見ることができるように、それは最初の行(5行目)のエラー、何らかの形でのconst VisaMux & MUXは(VisaMuxを呼び出しているようです)、それは存在しません。これは私がVisaMux Muxを使っている場合にも発生します。
私はVisaMuxをコンストラクタに必要なすべてのパラメータを渡すだけで作成したいので、VisaMuxの空のコンストラクタを呼びたくはありません。
どうすればいいですか?
答えは以下のとおりで、初期化リストの構文を使用するように指示します。初期化構文の使用を好むべきであると付け加えたいだけです。それ以外の場合は、パラメータリストのオブジェクトを2回構築することがよくあります。デフォルトでは1回、コンストラクタの本体の中では1回です。また、宣言したのと同じ順序で項目を初期化リストに入れておく必要があります(S. Meyers Effective C++ item 13参照) – Tod
@Andrew Wiens:この回答を見る[ここ](http://stackoverflow.com/質問/ 6724626/c-constructor/6724639#6724639)は、コンストラクタ本体内でのmemberwise初期化と代入の違いについて説明しています –