【发布时间】:2014-08-14 19:32:27
【问题描述】:
我正在使用 asn1c 转换的代码,它采用了我的 ASN.1 代码并将其转换为 C,因此声明了一大堆复杂类型和 structs .目前,我收到此错误:
BACnetFaultParameter.h:125:11: 错误: 重新定义‘struct list_of_fault_values’ BACnetFaultParameter.h:78:11: 注意:原来 在这里定义
我当前的代码如下所示(请注意,这些代码块是 .hfiles,它们包含在同名的 .c 文件中):
typedef struct BACnetFaultParameter {
BACnetFaultParameter_PR present;
union BACnetFaultParameter_u {
NULL_t none;
struct fault_characterstring {
struct list_of_fault_values {
A_SEQUENCE_OF(CharacterString_t) list;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} list_of_fault_values;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} fault_characterstring;
然后在代码中的几行,我被告知我正在重新声明struct list_of_fault_values。
struct fault_state {
struct list_of_fault_values {
A_SEQUENCE_OF(struct BACnetPropertyStates) list;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} list_of_fault_values;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} fault_state;
让我感到困惑的是,我在两个代码块周围都使用了 #ifndef 和 #define 语句,然后我收到错误提示
“故障状态没有名为 list_of_fault_values 的成员”
在.c 文件中。 list_of_fault_values 是本地结构,但它的行为就像一个全局的、运行的 grep 也没有指出任何可能的问题。我的问题是。有人有想法吗?或者有没有人遇到过类似的事情?
这是带有#ifndef 语句的代码
struct fault_characterstring {
#ifndef _LIST_OF_FAULT_VALUES
#define _LIST_OF_FAULT_VALUES
struct list_of_fault_values {
A_SEQUENCE_OF(CharacterString_t) list;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} list_of_fault_values;
#endif
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} fault_characterstring;
和
#ifndef _LIST_OF_FAULT_PARAMETERS
#define _LIST_OF_FAULT_PARAMETERS
struct list_of_fault_values {
A_SEQUENCE_OF(struct BACnetPropertyStates) list;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} list_of_fault_values;
#endif
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} fault_state;
【问题讨论】:
-
你的
#ifndef语句是什么样的? -
我在帖子问题中添加了“#ifndef”
标签: c struct declaration