./theheader.h:349: Error: Syntax error in input(3).
违规行:
string read_gdbm(GDBM_FILE dbf, string key_str, bool show_err = gbls.verbose);
有什么想法吗?
答案 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替换为新头文件。