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;
:
:
}
到可能发行的任何指针将高度赞赏。 谢谢,
你可能在其他地方有'#define int8'的东西。在标题中尝试'#ifdef int8'后跟'#error aha' –
或者,查看'xmas_datatype_int8_t'的定义方式 –
请显示您编译的实际代码,而不是提取。你显示的typedef不会被编译,因为它不会在紧跟大括号后面以分号结尾,并且也没有名称。所以,要么斩掉一些重要的信息,要么就是使用其他的东西。我不愿意使用'int8'和'int16'这样的名字作为成员;有很多风险(在我的书中,根据经验)存在这些名称的数据类型。 (我工作的一个系统有一组数据类型,例如'int1','int2','int4'和...好吧,它遇到了'int8' - 8个字节或8位的问题?) –