1
 const struct EbmlSyntax {
    uint32_t id;
    EbmlType type;
    int list_elem_size;
    int data_offset;
    union {
        uint64_t    u;
        double      f;
        const char *s;
        const struct EbmlSyntax *n;
    } def;
} ;

上記のconst構造体を使用する必要があり、を使用して定数構造体を作成したい

{ EBML_ID_DOCTYPE, EBML_STR, 0, offsetof(Ebml,doctype), {.def.s = "(none)"} }

ただし、VS8.0コンパイラではエラーエラーC2143が発生します。構文エラー:「。」の前に「}」がありません。C++プロジェクトをコンパイルするとき。

私はいくつかの方法を試しましたが、char *をuint64_t(最初のタイプに割り当てる)にキャストする方法しか見つかりません。

(uint64_t)("none")

そして私は組合を使うことができます。この方法は安全ですか?VSデバッグツールを使用して、このオブジェクトと他のstruct-unionオブジェクトの構造を確認します。structとunionのメンバーが正しく期限切れになっていることは問題ないようです。

4

2 に答える 2

1

その構文で共用体の最初の要素のみを初期化できます。別のアプローチが必要です。

于 2013-01-22T10:35:28.013 に答える
0

コンストラクstructターを指定し、そこで初期化を行います。もちろん、これは静的な初期化ではありませんが、 に入るまで構造体が使用されmainない場合でも、問題にはなりません。

本当に静的な初期化が必要な場合は、union をに置き換えstructます。これによりオブジェクトのサイズが大きくなりますが、静的な初期化を行ういくつかのオブジェクトにのみ使用される場合、これは大きな問題にはなりません。

于 2013-01-22T10:33:29.427 に答える