1

次のコードでは、

typedef unsigned long col24;
inline col24 MakeRGB24(int R, int G, int B) { return ...; }

struct blitdata
{
  union
  {
    int Flags, Stretch;
    col24 Luminance;
  };
  // (other members)
};

int main()
{
  blitdata BlitData =
  {
    MakeRGB24(0, 0, 0),
    // ...
  };
}

BlitDataの初期化子リストの最初の初期化子で次のエラーが発生するのはなぜですか:

非定数式を型col24(aka unsigned long) からintイニシャライザ リストに絞り込むことはできません

コンパイラは、メンバの初期化に使用するのではなく、型の初期化子を使用してのintメンバを初期化しようとするのはなぜですか?unioncol24col24

コンパイラは I がtostatic_castの結果であることを示唆しますが、これは望ましくない縮小をもたらす可能性があります。MakeRGB24int

初期化子リストLuminanceの結果を使用してメンバーを正しく初期化するにはどうすればよいですか?MakeRGB24

編集: blitdata PODのままにする必要があります。

4

1 に答える 1

0

これは明らかに非標準の gcc 拡張ですが、これはあなたが求めているものかもしれません:

blitdata BlitData =
{
    Luminance: MakeRgb24(0,0,0),
};

それがあなたにとって良くない場合は、後で割り当てることが唯一の方法だと思います。

于 2015-07-23T14:42:46.650 に答える