我正在尝试编写一个非常简单的C程序,它通过套接字发送ASN1号码。 这是ASN.1定义
模块定义:: = BEGIN
M1 ::= SEQUENCE { number INTEGER -- integer to send } END
我生成了C类。现在我想我必须在主类中创建一个数字并对其进行编码并在另一侧对其进行解码。但如果我想创建一个M1对象
M1 a;
or
M1 *a;
我收到了这个错误 M1型无法解决。
答案 0 :(得分:3)
问题是您正在使用C编译器进行编译....因此必须使用完整的struct Name
(或者通过typedef&#39}来引用结构名称。你已经这样做了......就像生成的代码那样。)
我使用您提供的URL粘贴了您的ASN.1模块,下载了生成的代码并尝试使用它。
请注意,生成的定义包含(在M1.h中)
#ifdef __cplusplus
extern "C" {
#endif
/* M1 */
typedef struct M1 {
long number;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} M1_t;
/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_M1;
#ifdef __cplusplus
}
#endif
现在我尝试使用mymain.C
#include "M1.h"
int main() {
M1 a;
struct M1 b;
M1_t c;
}
用g ++编译(即作为C ++程序),没有抱怨
现在,如果我使用gcc编译(相同的源代码)mymain.c,那么我得到:
x.c: In function ‘main’:
x.c:6:4: error: unknown type name ‘M1’
M1 a;
删除该行(即不使用M1,但使用struct M1
或M1_t
来引用类型),所有内容都可以正常编译。
总结:
M1
或M1_t
(或struct M1
)struct M1
或M1_t
进行所有进出检查: