【问题标题】:Swig: Syntax error in input(3)Swig:输入中的语法错误(3)
【发布时间】: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);

有什么想法吗?

【问题讨论】:

  • 我记得,这些通常是一些被遗漏的命名空间名称。

标签: c syntax swig


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        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 指令处的新头文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-08
          • 1970-01-01
          • 1970-01-01
          • 2016-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多