Visual Studio 2010 で古いコードを C から C++ に移植していて、これに遭遇しました。
typedef struct OptionDef {
const char *name;
int flags;
union {
void *dst_ptr;
int (*func_arg)(void *, const char *, const char *);
size_t off;
} u;
const char *help;
const char *argname;
} OptionDef;
static const OptionDef options[] = {
{ "x", HAS_ARG, { .func_arg = opt_width }, "force displayed width", "width" },
...
構文エラーで失敗するようになりました。Statically initialize anonymous union in C++の応答を見てきましたが、配列を設定しているため、コンストラクターのオーバーロードは機能しません。これを行う他の方法はありますか (共用体を使用しないようにコードを書き直すのではなく)?
更新:私はより具体的であるべきでした-配列には、ユニオンのすべての部分を使用するさまざまな初期化子が含まれています:
static int is_full_screen;
{ "fs", OPT_BOOL, { &is_full_screen }, "force full screen" },
したがって、ユニオンの順序を変更するだけでは役に立ちません。