Я пытаюсь написать очень простую программу на C, которая отправляет номер ASN1 через сокеты.
это определение ASN.1
Модуль ОПРЕДЕЛЕНИЯ :: = НАЧАТЬ
M1 ::= SEQUENCE { number INTEGER -- integer to send } END
Я генерирую классы C. Теперь я думаю, что мне нужно создать число в главном классе, кодировать его и декодировать на другой стороне. Но если я попытаюсь создать объект M1
M1 a;
or
M1 *a;
Я получил эту ошибку
Тип M1 не может быть решена.
Проблема в том, что вы компилируете с помощью C-компилятора …. поэтому структуры должны ссылаться с полным struct Name
(или по названию typedef, если вы сделали это … как сгенерированный код).
Я вставил ваш модуль ASN.1 по указанному вами URL-адресу, скачал сгенерированный код и попытался его использовать.
Обратите внимание, что созданное определение содержит (в 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 ++)
Теперь, если я скомпилирую (из того же источника) mymain.c с помощью gcc, то получу:
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
Для всех входов и выходов проверьте: