2013-02-22 55 views
1

我的工作在PCL(点云中图书馆,www.pointclouds.org) 与此库,我可以得到什么我的Kinect的是在看3D表示的项目。 的问题是,我使用这个结构:混乱与工会和struct

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'* 
+0

您有一个名为您的结构? – 2013-02-22 10:00:03

+0

是''points'一个'RGBValue'实例的数组? – 2013-02-22 10:00:43

+0

什么是'在表达式'someCloud->点[IDX] .rgba.Red rgba'; '? – harper 2013-02-22 10:02:39

回答

7

您必须命名相应的匿名结构实例

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; 
+1

嗯,是正确的,这并没有给一个结构名字,但结构*实例*。没有名字,根本就没有实例。 – leemes 2013-02-22 10:10:57

+0

你的解决方案是正确的,但你的文本是错误的。这是_not_命名一个结构,这是一个匿名结构的实例化。 – 2013-02-22 10:11:16

+0

@leemes,JackAidley你们都是正确的,我已经在我的答案马虎。谢谢,修正。 – 2013-02-22 10:19:47

1

此:

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

宣布联合,具有嵌套结构。工会只包含floatuint32_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

+0

+1用于正确的命名和解释。 – 2013-02-22 10:20:45