1

構造体のインスタンスをインスタンス化するためにイニシャライザ リストを使用してきましたが、デフォルトのコンストラクタを追加したいと考えています。

struct Size {
    unsigned int width;
    unsigned int height;
};

void SizeFunc(Size const &size) { }

int main() {
    SizeFunc({1024, 768});   // OK.
}

残念ながら、デフォルトのコンストラクターを追加すると、初期化リストでインスタンス化するときにエラーが発生します。

struct Size {
    Size() : width(1920), height(1080) { }

    unsigned int width;
    unsigned int height;
};

void SizeFunc(Size const &size) { }

int main() {
    Size size; // OK.
    SizeFunc({1024, 768});    // error: no matching function for call to
                              // 'Size::Size(<brace-enclosed initializer list>)'
}

これを機能させるには、どのコンストラクターを追加する必要がありますか? std::initializer_list でコンストラクターを使用しようとしましたが、これまでのところ成功していません。

4

1 に答える 1

4

引数でメンバーを初期化する 2 つの unsigned int を取る非明示的なコンストラクターを追加するだけです。

Size(unsigned int width, unsigned int height) : width(width), height(height) {}
于 2013-08-14T09:20:15.167 に答える