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

Мне нужен был кодировщик/декодер 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’

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


person Eedoh    schedule 18.02.2011    source источник
comment
Не уверен, что я полностью понимаю проблему, но почему бы не попробовать определить тип в отдельном файле и включить этот файл во все другие файлы, которые его используют?   -  person Christian    schedule 18.02.2011


Ответы (2)


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

person fredoverflow    schedule 18.02.2011
comment
да, я пытался включить asn1parser.h в asn1p_oid.h и закомментировать включение asn1p_oid.h в asn1parser.h (фактически сделал это для нескольких файлов), но id не помог :S - person Eedoh; 18.02.2011

Я был уверен, что причиной проблемы были "включения", однако проблема заключалась в этой строке

typedef intmax_t asn1c_integer_t;

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

person Eedoh    schedule 22.02.2011