1

私はこのライブラリを使用してPCL(Point Cloud Library、www.pointclouds.org)でプロジェクトに取り組んでおり、Kinectが見ているものの3D表現を取得できます。問題は、私はこの構造体を使用していることです:

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'*
4

2 に答える 2

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;
于 2013-02-22T09:58:43.840 に答える
1

これ:

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

ネストされた構造体型を持つ共用体型を宣言します。ユニオンにはaまたはaのみが含まれます。ネストされた構造体のインスタンスを宣言したことはありません。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;

または、タイプを匿名のままにして、Olafが示したようにインスタンスを宣言するだけです。(私の例の名前付きタイプは、と呼ぶことができますRGBValue::RGBA

于 2013-02-22T10:06:38.887 に答える