Я работаю над проектом в 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'*
Вы должны соответственно назвать свой анонимный экземпляр структуры
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;
Это:
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
)