C语言 Swig:输入中的语法错误(3)

disho6za  于 2022-12-11  发布在  其他
关注(0)|答案(4)|浏览(179)
./theheader.h:349: Error: Syntax error in input(3).

进攻线:

string read_gdbm(GDBM_FILE dbf, string key_str, bool show_err = gbls.verbose);

有什么想法吗?

mrzz3bfm

mrzz3bfm1#

通常,SWIG中的语法错误意味着它不能理解有问题的行(这可能很烦人,因为行号没有跟在%define之类的宏后面)。(是否应为std::string?是否已定义?)GDBM_FILE(是否已定义?是否应在命名空间中?),可能是gbls.verbose(是否已定义?)对SWIG有意义。使用-E选项运行swig可能会有帮助(确保重定向stdout),找到相应的行并向后搜索所涉及的每个类型。您可能需要添加一些#include
同时检查前一行,确保没有遗漏分号或类似的字符。

6xfqseft

6xfqseft2#

顺便说一句,我遇到过同样的问题,原因各不相同:我试图使用一个vector〈vector< double >〉。现在根据C++99标准,“〉〉”字符序列不能与模板一起使用,因此弹出swig错误消息。解决方法是简单地添加一个额外的空格来分隔它们。

xxhby3vn

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文件,然后错误消失了。

标题1.h

#ifndef SWIG
19 typedef struct T {
   ...
23 } PACKED TlvHdr;
#endif

如果无法修改theheader.h文件,可以创建一个新的头文件,其中只包含所需的声明,并将文件从theheader.h替换为位于%include指令的新头文件

envsm3lx

envsm3lx4#

我也遇到过类似的问题,-E帮助我理解了宏定义隐藏在#ifndef SWIG块中。我怀疑这里它看不到GDBM_FILE的定义,可能是因为它是does not recurse

相关问题