5

私は次のようにクラスの公開メンバーとして列挙型を持っています。」

class myClass
{
    public:
        enum myEnum
        {
            myEnum1,
            myEnum2
        };
};

また、コンストラクターを宣言します。これは、パブリックパラメーター化されたコンストラクターです。

myClass(myEnum);

クラス定義の外で同じものを次のように定義します。

myClass :: myClass(myEnum E)
{
}

myEnumをデフォルトの引数で初期化するにはどうすればよいですか?

私は試した:

私)

myClass :: myClass(myEnum E = 0); //to int error

ii)

myClass :: myClass(myEnum E = {0}); //some error

iii)

myClass :: myClass(myEnum E = {0, 1}); //some error

私がまだ理解していないように思われることが1つあります。

列挙型の値をコンストラクターに渡すにはどうすればよいですか。それでもエラーが発生します。そして、私はそれをこのようにする必要があります:

derived(arg1, arg2, arg3, enumHere, arg4, arg5); //call

関数の定義:

derived(int a, int b, int c, enumHere, int 4, int 5) : base(a, b);

以下の回答の1つが行うように、列挙型をどこで初期化する必要がありますか?

4

1 に答える 1

9

型宣言とフィールドを間違えたようです。クラスmyEnumには型の宣言があり、クラス自体はその型のフィールドを保持していません。

これを試して:

class myClass
{
    public:
        enum myEnum
        {
            myEnum1,
            myEnum2
        } enumField;
};

次に、コンストラクターはメンバーの初期化を使用する必要があります。

myClass::myClass() : enumField(myEnum1) {};

パラメータ化されたコンストラクタが必要な場合:

myClass::myClass(myEnum e) : enumField(e) {};

デフォルトの引数を持つパラメーター化されたコンストラクターが必要な場合:

myClass(myEnum e = myEnum1) : enumField(e) {};

派生クラスで前述のコンストラクターを使用する場合:

myDerived(myEnum e) : myClass(e) {};
于 2012-09-23T10:38:21.203 に答える