struct structA
{
StructA(const int a) { ... } ;
}
、その後、私のメインの構造体:C++のコンストラクタ一致する関数がない
の.h
struct MainStruct
{
MainStruct(int x, int y) ;
private :
int _x ;
int _y ;
StructA _s ;
}
* .cppファイル
StructA(int x, int y) : _x(x) , _y(y)
{
_s = StructA(x) ;
}
間違っていますか?
_s = StructA(x) ;
をStructA s = StructA(x) ;
に置き換えてプライベートから削除すると問題なく動作します。何故ですか?
In constructor ....
no matching function for call to 'StructA'
_y(y)
コンストラクタの本体を入力する前に、すべてのメンバーを完全に構築する必要があります。 '_s'はメンバ初期化子リストに適切なパラメータで指定されておらず、デフォルトコンストラクタもないので構築できません。 – user4581301
これは、パラメータを使用してコンストラクタを宣言すると、デフォルトのコンストラクタがデフォルトで削除されるためです(明示的に宣言する必要があるため)。 –