5

多くのメンバーとさまざまなタイプの構造体があります(20個のメンバーのようです):

enum TheEnum
{
    FIRST = 0,
    SECOND,
    ...
}

struct TheStruct
{
    TheEnum z; // <--- the point !!! note that this is the first member (edited)
    int a;
    int b;
    char c[32];
    ...
}

列挙型のメンバーがあるため、次のように宣言することはできません。

TheStruct Object = {0};

コンパイル エラーが発生しますが、私の意見では、この初期化が最善の方法です。

私が考えることができる他の方法は次のとおり
です。 1.ZeroMemoryそれは、しかし、私はこれが好きではありません。
2. コンストラクターを作成しますが、これには多くの作業が必要です。
3. 初期化しないでください。

では、列挙型の問題を解決する方法はありますか? これら3つの方法を選択する必要がありますか?
ありがとう!

編集:私の大きな間違いです。エラーはTheEnum、最初のメンバーとして存在する場合にのみ発生します。
vs2008 を使用して C++ コードとしてコンパイルされています。
エラーは C2440 です。http://msdn.microsoft.com/en-us/library/sy5tsf8z%28v=VS.80%29.aspx

4

2 に答える 2

3

[編集] 質問が変更されたため

構造体を初期化する場合は、初期化子で正しい型を指定する必要があります。あなたの場合、正しい初期化は次のようになります。

TheStruct Object = {FIRST};

初期化リストは、指定された数の構造体メンバーを記述した内容で初期化し、残りの構造体を「0」で初期化します。最初のメンバーは列挙型であるため、この場合はその列挙型を初期化する必要があります。

[/編集]

何も必要ありません。C++ ではなく C でコンパイルしている場合は、enum と struct を記述することを忘れないでください。すべてが機能するはずです...

enum TheEnum
{
    FIRST = 0,
    SECOND,
    ...
}

struct TheStruct
{
    int a;
    int b;
    char c[32];
    ...
    enum TheEnum z; // <--- the point !!!
}

struct TheStruct Object = {0};
于 2013-01-04T11:29:39.127 に答える
0

enum他のメンバーと同じようにメンバーを初期化できます。例えば:TheStruct temp = {0,0,"", FIRST};

于 2013-01-04T11:14:20.483 に答える