Как кто-то может определить тип данных, а затем использовать его в другом файле, который включен в тот же файл, сразу после определения типа данных - PullRequest
0 голосов
/ 18 февраля 2011

Мне нужен был кодер / декодер asn1 BER, и я нашел его как часть компилятора "asn1c" (вот ссылка http://lionet.info/asn1c/blog/).

У меня нет проблем с компиляцией, используя процедуру "configure, make, make install", но кажется, что невозможно скомпилировать ее отдельно.

Я пытаюсь скомпилировать функциональность кодера / декодера BER этого пакета в статическую библиотеку в NetBeans. Однако у меня большие проблемы с некоторыми «включенными» глупостями. Вот пример ...

В файле asn1parser.h есть typedef нового типа с именем "asn1c_integer_t"

//some preprocessor statements removed to keep this post short...
typedef intmax_t asn1c_integer_t;


#include "asn1p_list.h"
#include "asn1p_oid.h"      /* Object identifiers (OIDs) */
#include "asn1p_ref.h"      /* References to custom types */
etc...

Однако некоторые из этих файлов, которые включены в предыдущий файл (например, asn1p_oid.h), используют новый тип данных, определенный в предыдущем файле.

#ifndef ASN1_PARSER_OID_H
#define ASN1_PARSER_OID_H

typedef struct asn1p_oid_arc_s {
    asn1c_integer_t number; /* -1 if not yet defined */
    char *name; /* 0 if not defined */
} asn1p_oid_arc_t;
etc...

Это не имеет смысла для меня, и я продолжаю получать ошибки, такие как:

asn1parser.h: 32: ошибка: ожидается ‘=’, ‘,’, ‘;’, ‘asm’ или ‘ атрибут ’ перед ‘asn1c_integer_t’

Может кто-нибудь помочь мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2011

Я был уверен, что причиной проблемы были «включенные», однако проблема была в этой строке

typedef intmax_t asn1c_integer_t;

Очевидно, моя версия gcc не распознает этот тип intmax_t. Я обменял его на простое "int", и теперь оно работает: D

0 голосов
/ 18 февраля 2011

Вы пробовали #include "asn1parser.h" в "некоторых из этих файлов"? Может быть, они также включены в другом месте, и в этот момент имя asn1c_integer_t неизвестно компилятору.

...