1

別のクラスの定義内で定数引数を持つクラスのインスタンスを宣言するのに問題があります。

class Foo
{
    private:
        const int m_a, m_b;
    public:
        Foo(int a, int b) : m_a(a), m_b(b) {}
};

class Bar
{
    public:
        Foo foo1(1,2);
        Foo foo2(2,3);
};

これから私はエラーを取得します:

"error: expected identifier before numeric constant"
"error: expected ',' or '...' before numeric constant"
4

3 に答える 3

11

これは、データ メンバーを初期化する方法ではありません。コンストラクターの初期化リストで行う必要があります。

class Bar
{
public:
    Bar() : foo1(1,2), foo2(2, 3) { }
    //    ^^^^^^^^^^^^^^^^^^^^^^^
    //    This is how you initialize the sub-objects of a class
    //    (both base sub-objects and member sub-objects)
    Foo foo1;
    Foo foo2;
};

C++11 ではデータ メンバーのインライン初期化が可能ですが、構文が若干異なることに注意してください (中かっこを使用する必要があります)。

class Bar
{
public:
    Foo foo1{1, 2};
    Foo foo2{2, 3};
};

または、代わりに、コピー初期化構文を使用できます。

class Bar
{
public:
    Foo foo1 = Foo(1, 2);
    Foo foo2 = Foo(2, 3);
};
于 2013-04-21T22:04:17.993 に答える
5

コンストラクターを介してこれらのメンバーを初期化する必要があります。

class Bar
{
    public:
        Foo foo1;
        Foo foo2;

        Bar() : foo1(1, 2), foo2(2, 3) {}
};

コロンに続くのはmember-initializer listです。

于 2013-04-21T22:04:49.430 に答える
1

C++03 ではBar、コンストラクター内で属性を初期化する必要があります。

class Bar
{
    public:
        Foo foo1;
        Foo foo2;

        Bar() : foo1(1,2), foo2(2,3) {} 
};
于 2013-04-21T22:07:41.770 に答える