2014-04-28 95 views
0

我看到此编译错误“没有成员命名”的一些联合元素。编译错误“没有成员命名”为联盟成员

snmp_xmas.c:129: error: 'xmas_datatype_value_t' has no member named 'int8' 
snmp_xmas.c:132: error: 'xmas_datatype_value_t' has no member named 'int16' 

我看不到成员定义有任何问题。工会定义如下。

typedef union { 
/** 
* Value for XMAS_ITEM_DATATYPE_BITS 
*/ 
xmas_datatype_bits_t   bits; 
/** 
* Value for XMAS_ITEM_DATATYPE_BOOL 
*/ 
xmas_datatype_bool_t boolean; 
/** 
* Value for XMAS_ITEM_DATATYPE_CERRNO 
*/ 
xmas_datatype_cerrno_t  cerrno; 
/** 
* Value for XMAS_ITEM_DATATYPE_DATETIME 
*/ 
xmas_datatype_datetime_t  datetime; 
/** 
* Value for XMAS_ITEM_DATATYPE_EMPTY 
*/ 
xmas_datatype_empty_t  empty; 
/** 
* Value for XMAS_ITEM_DATATYPE_ENUM 
*/ 
xmas_datatype_enum_t enumeration; 
/** 
* Value for XMAS_ITEM_DATATYPE_IDENTITYREF 
*/ 
xmas_datatype_identityref_t identityref; 
/** 
* Value for XMAS_ITEM_DATATYPE_INT16 
*/ 
xmas_datatype_int16_t  int16; 
/** 
* Value for XMAS_ITEM_DATATYPE_INT32 
*/ 
xmas_datatype_int32_t  int32; 
/** 
* Value for XMAS_ITEM_DATATYPE_INT64 
*/ 
xmas_datatype_int64_t  int64; 
/** 
* Value for XMAS_ITEM_DATATYPE_INT8 
*/ 
xmas_datatype_int8_t   int8; 
/** 
* Value for XMAS_ITEM_DATATYPE_INTF 
*/ 
xmas_datatype_intf_t  *intf; 
/** 
* Value for XMAS_ITEM_DATATYPE_IPV4_ADDR 
*/ 
xmas_datatype_ipv4_addr_t ipv4_addr; 
/** 
* Value for XMAS_ITEM_DATATYPE_IPV6_ADDR 
*/ 
xmas_datatype_ipv6_addr_t *ipv6_addr; 
/** 
* Value for XMAS_ITEM_DATATYPE_IP_ADDR 
*/ 
xmas_datatype_ip_addr_t  *ip_addr; 
/** 
} xmas_datatype_value_t; 

所有的xmas数据类型都在单个头文件中定义,并且包含在引用union成员的.c文件中。代码片段粘贴在下面。

cerrno 
xmibd_convert_xmas_to_XXX(xmas_item_datatype_t *xmas_datatype, 
         xmas_datatype_value_t *xmas_value, 
         struct sa_do_value  **ret_value) 
{ 
: 
: 
: 

switch (*xmas_datatype) { 
    case XMAS_ITEM_DATATYPE_BITS: 
     out_value = sa_do_value_new_unsigned_long(xmas_value->bits); 
     break; 
    case XMAS_ITEM_DATATYPE_BOOL: 
     out_value = sa_do_value_new_boolean(xmas_value->boolean); 
     break; 
    case XMAS_ITEM_DATATYPE_CERRNO: 
     out_value = sa_do_value_new_unsigned_int(xmas_value->cerrno); 
     break; 
    case XMAS_ITEM_DATATYPE_EMPTY: 
     out_value = sa_do_value_new_boolean(xmas_value->empty); 
     break; 
    case XMAS_ITEM_DATATYPE_DATETIME: 
     out_value = sa_do_value_new_datetime(xmas_value->datetime); 
     break;   
    case XMAS_ITEM_DATATYPE_INT8: 
     out_value = sa_do_value_new_byte(xmas_value->int8); 
     break; 
    case XMAS_ITEM_DATATYPE_INT16: 
     out_value = sa_do_value_new_short(xmas_value->int16); 
     break; 
: 
: 
} 

到可能发行的任何指针将高度赞赏。 谢谢,

+0

你可能在其他地方有'#define int8'的东西。在标题中尝试'#ifdef int8'后跟'#error aha' –

+0

或者,查看'xmas_datatype_int8_t'的定义方式 –

+1

请显示您编译的实际代码,而不是提取。你显示的typedef不会被编译,因为它不会在紧跟大括号后面以分号结尾,并且也没有名称。所以,要么斩掉一些重要的信息,要么就是使用其他的东西。我不愿意使用'int8'和'int16'这样的名字作为成员;有很多风险(在我的书中,根据经验)存在这些名称的数据类型。 (我工作的一个系统有一组数据类型,例如'int1','int2','int4'和...好吧,它遇到了'int8' - 8个字节或8位的问题?) –

回答

0

该问题与Makefile中提到的头文件的重复废弃路径有关。这是指错误的道路,所以显然我的变化没有受到影响。