2016-04-04 2 views
-1

Следующий модуль не может быть обработан SWIG с сообщением об ошибке «example.i: 2: Ошибка: ошибка синтаксиса на входе (1)»ГЛОТОК ошибка синтаксиса при определении BOOL

%module example 
typedef unsigned char bool; 
bool isEven(int number); 

При изменении bool к boll все работает нормально. Кажется, что SWIG обрабатывает bool как встроенный тип в C. Однако только _Bool является встроенным типом в C99, а bool не определяется, если не включает в себя

У меня есть большой интерфейс, который мне нужно обернуть для java, который содержит следующие ЬурейеЕ:

#ifndef __cplusplus 
typedef unsigned char bool; 
#endif 

я мог обойти проблемы, добавив

#define __cplusplus 

в мой файл модуля SWIG перед включением заголовка, определяющего интерфейс. Однако в этом случае в том числе cpointer.i не работает больше (Ошибка: Отсутствует идентификатор #ifdef, который происходит для каждой строки, содержащей cpointer.i #ifdef __cplusplus)

Любые предложения о том, как я могу использовать свой заголовочный файл интерфейса без изменения это (т.е. без удаления моего bool typedef) и все еще можно использовать cpointer.i?

+0

кажется, что имя BOOL является уже определен. Например, это может быть макрос. Поэтому вам нужно проверить, что такое bool. Вместо bla ... bla..bla .. вы должны показать сообщение об ошибке. –

+0

Я ничего не включаю, поэтому нет кода, который может определять имя bool. Когда я запускаю SWIG на example.i, который содержит только 3 строки сверху, я получаю «example.i: 2: Ошибка: ошибка синтаксиса во вводе (1)». – sun

ответ

1

Если bool действительно не определено в вашем случае, не должно быть никаких проблем переименовать его в чем-то еще с помощью макроса в файле интерфейса SWIG, то есть сделать:

%module example 
#define bool uchar_bool 
typedef unsigned char bool; 
bool isEven(int number); 
Смежные вопросы