./theheader.h:349: Error: Syntax error in input(3).
进攻线:
string read_gdbm(GDBM_FILE dbf, string key_str, bool show_err = gbls.verbose);
有什么想法吗?
mrzz3bfm1#
通常,SWIG中的语法错误意味着它不能理解有问题的行(这可能很烦人,因为行号没有跟在%define之类的宏后面)。(是否应为std::string?是否已定义?)GDBM_FILE(是否已定义?是否应在命名空间中?),可能是gbls.verbose(是否已定义?)对SWIG有意义。使用-E选项运行swig可能会有帮助(确保重定向stdout),找到相应的行并向后搜索所涉及的每个类型。您可能需要添加一些#include。同时检查前一行,确保没有遗漏分号或类似的字符。
%define
std::string
GDBM_FILE
gbls.verbose
-E
swig
#include
6xfqseft2#
顺便说一句,我遇到过同样的问题,原因各不相同:我试图使用一个vector〈vector< double >〉。现在根据C++99标准,“〉〉”字符序列不能与模板一起使用,因此弹出swig错误消息。解决方法是简单地添加一个额外的空格来分隔它们。
xxhby3vn3#
我遇到了一个类似的错误。我会澄清我的过程,希望它能有所帮助。
库.i:
... %begin %{ #include "header1.h" %} ... %include "header1.h"
标题1.h:
19 typedef struct T { ... 23 } PACKED TlvHdr;
错误信息如下
./header1.h:23: Error: Syntax error in input(3).
我检查了SWIG文档(http://www.swig.org/Doc1.3/SWIG.html 5.7.1),发现语法错误非常常见,可能是由SWIG bug引起的。文档建议当遇到语法错误时使用#ifndef SWIG来省略将使SWIG解析器发出错误的语句。因此我修改了header1.h文件,然后错误消失了。
#ifndef SWIG
header1.h
#ifndef SWIG 19 typedef struct T { ... 23 } PACKED TlvHdr; #endif
如果无法修改theheader.h文件,可以创建一个新的头文件,其中只包含所需的声明,并将文件从theheader.h替换为位于%include指令的新头文件
theheader.h
%include
envsm3lx4#
我也遇到过类似的问题,-E帮助我理解了宏定义隐藏在#ifndef SWIG块中。我怀疑这里它看不到GDBM_FILE的定义,可能是因为它是does not recurse。
4条答案
按热度按时间mrzz3bfm1#
通常,SWIG中的语法错误意味着它不能理解有问题的行(这可能很烦人,因为行号没有跟在
%define
之类的宏后面)。(是否应为std::string
?是否已定义?)GDBM_FILE
(是否已定义?是否应在命名空间中?),可能是gbls.verbose
(是否已定义?)对SWIG有意义。使用-E
选项运行swig
可能会有帮助(确保重定向stdout),找到相应的行并向后搜索所涉及的每个类型。您可能需要添加一些#include
。同时检查前一行,确保没有遗漏分号或类似的字符。
6xfqseft2#
顺便说一句,我遇到过同样的问题,原因各不相同:我试图使用一个vector〈vector< double >〉。现在根据C++99标准,“〉〉”字符序列不能与模板一起使用,因此弹出swig错误消息。解决方法是简单地添加一个额外的空格来分隔它们。
xxhby3vn3#
我遇到了一个类似的错误。我会澄清我的过程,希望它能有所帮助。
库.i:
标题1.h:
错误信息如下
我检查了SWIG文档(http://www.swig.org/Doc1.3/SWIG.html 5.7.1),发现语法错误非常常见,可能是由SWIG bug引起的。
文档建议当遇到语法错误时使用
#ifndef SWIG
来省略将使SWIG解析器发出错误的语句。因此我修改了header1.h
文件,然后错误消失了。标题1.h:
如果无法修改
theheader.h
文件,可以创建一个新的头文件,其中只包含所需的声明,并将文件从theheader.h
替换为位于%include
指令的新头文件envsm3lx4#
我也遇到过类似的问题,
-E
帮助我理解了宏定义隐藏在#ifndef SWIG
块中。我怀疑这里它看不到GDBM_FILE
的定义,可能是因为它是does not recurse。