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

时间:2013-08-13 15:57:27

标签: c syntax swig

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

违规行:

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

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

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

同时检查上一行,以确保您没有丢失分号或类似内容。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我遇到了类似的错误。我会澄清流程,希望对您有所帮助。

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.html 5.7.1),发现语法错误非常常见,很可能是由于SWIG错误引起的。

文档建议我们遇到语法错误,请使用“ #ifnedf SWIG”来省略会使SWIG解析器发出错误的语句。所以我更改了header1.h文件,然后错误消失了。

header1.h

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

如果您不能修改theheader.h文件,则可以制作一个仅包含所需声明的新头文件,并通过%include指令将文件从theheader.h替换为新头文件。