В следующем коде
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
(акаunsigned long
) чтобыint
в списке инициализаторов
Почему компилятор пытается инициализировать int
член union
с инициализатором, чей тип col24
вместо того, чтобы использовать его для инициализации col24
член?
Компилятор предполагает, что я static_cast
результат MakeRGB24
в int
, но это может привести к нежелательному сужению.
Как можно Luminance
член должен быть правильно инициализирован с использованием результата MakeRGB24
в списке инициализаторов?
Редактировать: blitdata
должен остаться POD.
Это, очевидно, нестандартное расширение GCC, но это может быть то, что вы после:
blitdata BlitData =
{
Luminance: MakeRgb24(0,0,0),
};
Если это не подходит для вас, я подозреваю, что назначить его позже — единственный способ.