очень простой пример ASN1

Я пытаюсь написать очень простую программу на C, которая отправляет номер ASN1 через сокеты.
это определение ASN.1

Модуль ОПРЕДЕЛЕНИЯ :: = НАЧАТЬ

  M1 ::= SEQUENCE
{
number INTEGER  --  integer to send
} END

Я генерирую классы C. Теперь я думаю, что мне нужно создать число в главном классе, кодировать его и декодировать на другой стороне. Но если я попытаюсь создать объект M1

M1 a;
or
M1 *a;

Я получил эту ошибку
Тип M1 не может быть решена.

0

Решение

Проблема в том, что вы компилируете с помощью 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 чтобы сослаться на тип), все компилируется нормально.

В итоге:

  • Выберите свой яд, C или C ++
  • Если вы в C ++, используйте M1 или же M1_t (или же struct M1)
  • Если вы находитесь в C, используйте struct M1 или же M1_t

Для всех входов и выходов проверьте:

3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector