путаница с объединением и структурой

Я работаю над проектом в PCL (Point Cloud Library, www.pointclouds.org)
с помощью этой библиотеки я могу получить трехмерное представление о том, на что смотрит мой Kinect.
проблема в том, что я использую эту структуру:

typedef union
{
struct
{
unsigned char Blue;
unsigned char Green;
unsigned char Red;
unsigned char Alpha;
};
float float_value;
uint32_t long_value;
} RGBValue;

Что я хочу сделать с этой структурой, так это получить отдельные данные каждого цвета и поместить их в числа с плавающей точкой:

float R = someCloud->points[idx].rgba.Red;
float G = someCloud->points[idx].rgba.Green;
float B = someCloud->points[idx].rgba.Blue;
float A = someCloud->points[idx].rgba.Alpha;

ошибка, которую я получаю, заключается в следующем:

error C2039: 'Red' : is not a member of 'System::UInt32'*

1

Решение

Вы должны соответственно назвать свой анонимный экземпляр структуры

typedef union
{
struct
{
unsigned char Blue;
unsigned char Green;
unsigned char Red;
unsigned char Alpha;
} rgba;

float float_value;
uint32_t long_value;
} RGBValue;

Вы можете получить доступ к членам как

RGBValue v;
float R = v.rgba.Red;
float G = v.rgba.Green;
float B = v.rgba.Blue;
float A = v.rgba.Alpha;
7

Другие решения

Это:

typedef union
{
struct
{
unsigned char Blue;
unsigned char Green;
unsigned char Red;
unsigned char Alpha;
};
float float_value;
uint32_t long_value;
} RGBValue;

объявляет союз тип, с вложенной структурой тип. Союз содержит только float или uint32_t — ты никогда не объявлял пример вашей вложенной структуры.

Вы можете дать вашему типу имя, чтобы вы могли использовать его в другом месте:

typedef union
{
struct RGBA // named struct type
{
unsigned char Blue;
unsigned char Green;
unsigned char Red;
unsigned char Alpha;
};
RGBA rgba; // AND an instance of that type
float float_value;
uint32_t long_value;
} RGBValue;

или оставьте тип анонимным и просто объявите экземпляр, как показал Олаф. (Именованный тип в моем примере может упоминаться как RGBValue::RGBA)

1

По вопросам рекламы [email protected]