8
./theheader.h:349: Error: Syntax error in input(3).

违规线路:

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

有任何想法吗?

4

4 回答 4

5

通常,SWIG 中的语法错误意味着它无法理解有问题的行(这可能很烦人,因为行号不遵循诸如%defines 之类的宏)。因此,我建议您检查string(应该是std::string?是否已定义?),GDBM_FILE(是否已定义?是否应该在命名空间中?)也许gbls.verbose(是否已定义?)对 SWIG 有意义。swig使用该选项运行可能会有所帮助-E(确保重定向标准输出),找到相应的行并向后搜索所涉及的每种类型。您可能需要添加一些#includes.

还要检查上一行,以确保您没有遗漏分号或类似的东西。

于 2014-02-13T04:00:18.257 回答
3

附带说明一下,由于不同的原因,我遇到了同样的问题:我试图使用矢量 <vector < double >>。现在根据 C++99 标准,“>>”字符序列不能与模板一起使用,因此会弹出 swig 错误消息。解决方案是简单地添加一个额外的空间来分隔它们。

于 2017-10-04T14:51:15.880 回答
1

我遇到了类似的问题,并-E帮助我了解宏定义隐藏在#ifndef SWIG块内。我怀疑这里它没有看到 的定义GDBM_FILE,可能是因为它没有递归

于 2017-02-01T13:56:18.823 回答
1

我遇到了类似的错误。我会澄清我的过程,希望它可以有所帮助。

库文件

...
%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 文档(http://www.swig.org/Doc1.3/SWIG.html 5.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 指令处的新头文件。

于 2020-02-11T10:20:51.587 回答