【发布时间】:2013-08-13 15:57:27
【问题描述】:
./theheader.h:349: Error: Syntax error in input(3).
违规行:
string read_gdbm(GDBM_FILE dbf, string key_str, bool show_err = gbls.verbose);
有什么想法吗?
【问题讨论】:
-
我记得,这些通常是一些被遗漏的命名空间名称。
./theheader.h:349: Error: Syntax error in input(3).
违规行:
string read_gdbm(GDBM_FILE dbf, string key_str, bool show_err = gbls.verbose);
有什么想法吗?
【问题讨论】:
通常,SWIG 中的语法错误意味着它无法理解有问题的行(这可能很烦人,因为行号不遵循诸如 %defines 之类的宏)。所以我建议你检查string(应该是std::string吗?它被定义了吗?),GDBM_FILE(它被定义了吗?它应该在命名空间中吗?)也许gbls.verbose(它被定义了吗?)定义?)对 SWIG 有意义。使用-E 选项运行swig 可能会有所帮助(一定要重定向标准输出),找到相应的行并向后搜索所涉及的每种类型。您可能需要添加一些#includes。
还要检查上一行,以确保您没有遗漏分号或类似内容。
【讨论】:
附带说明一下,由于不同的原因,我遇到了同样的问题:我试图使用矢量
【讨论】:
我遇到了类似的问题,-E 帮助我了解宏定义隐藏在 #ifndef SWIG 块中。我怀疑这里看不到GDBM_FILE的定义,可能是因为does not recurse。
【讨论】:
我遇到了类似的错误。我会澄清我的流程,希望对您有所帮助。
lib.i
...
%begin %{
#include "header1.h"
%}
...
%include "header1.h"
header1.h
19 typedef struct T {
...
23 } PACKED TlvHdr;
错误信息如下
./header1.h:23: Error: Syntax error in input(3).
我查看了 SWIG doc(http://www.swig.org/Doc1.3/SWIG.html5.7.1),发现语法错误很常见,可能是由 SWIG 错误引起的。
文档建议我们遇到语法错误使用“#ifnedf SWIG”来省略会使 SWIG 解析器发出错误的语句。所以我更改了header1.h文件,然后错误消失了。
header1.h
#ifndef SWIG
19 typedef struct T {
...
23 } PACKED TlvHdr;
#endif
如果您无法修改 theheader.h 文件,您可以创建一个仅包含您需要的声明的新头文件,并将文件从 theheader.h 替换为 %include 指令处的新头文件。
【讨论】: