2014-04-22 21 views
1

我在工作中使用联合和匿名结构。我想知道如何访问它内部的结构成员。就像如果我想使用union变量访问结构的G变量那么我该怎么做。请帮助:)无法访问工会内的匿名结构成员

typedef union 
{ 
uint8_t All;     
struct 
{ 
    uint8_t G:1;    
    uint8_t O_B:1;   
    uint8_t Unused:1;  
    uint8_t W1:1;   
    uint8_t W2:1;   
    uint8_t Y1:1;   
    uint8_t Y2:1;   
    uint8_t IAQ:1;   
}; 
} _UNION_VARIABLE; 

我收到编译错误的访问结构成员象下面这样:

_UNION_VARIABLE sg_RefreshVar; 

sg_RefreshVar.G = false; 

错误: #137 union "<unnamed>" has no field "G"

回答

2

你需要给它一个名称

typedef union 
{ 
uint8_t All;     
struct 
{ 
    uint8_t G:1;    
    uint8_t O_B:1;   
    uint8_t Unused:1;  
    uint8_t W1:1;   
    uint8_t W2:1;   
    uint8_t Y1:1;   
    uint8_t Y2:1;   
    uint8_t IAQ:1;   
} bit_field; 
} _UNION_VARIABLE; 

然后你可以去

_UNION_VARIABLE.bit_field.G; 
+0

如果结构是匿名的,那么该如何访问其成员呢? – Viki

+0

@vikram结构是匿名的,它没有类型名称。你想要的是一个非标准的扩展(大多数编译器都支持)。你使用的是什么编译器和什么平台。另外,我假设这是在C? – Cramer

+0

Thnx @ Cramer,是的代码是C,我使用Code Composer studio v5.0。我有一段代码,我有一个结构里面没有类型名称和实例的结构,我们仍然想使用联合实例访问结构成员,我想知道是否有可能,如果是的话,怎么样? – Viki

相关问题