使用swig时出错:输入中的语法错误(1)

时间:2016-11-24 13:27:09

标签: c++ swig gnuradio

我对swig很新,我收到一个我找不到的错误。错误是:

/ home / investigador / OMICRON-GNURadio / gr-freqAdaptiveOFDM / swig /../ include / freqAdaptiveOFDM / mapper.h:39:错误:输入(1)中的语法错误。

错误所在的文件是:

#ifndef INCLUDED_FREQADAPTIVEOFDM_SIGNAL_FIELD_H
#define INCLUDED_FREQADAPTIVEOFDM_SIGNAL_FIELD_H

#include <freqAdaptiveOFDM/api.h>
#include <gnuradio/digital/packet_header_default.h>

namespace gr {
namespace freqAdaptiveOFDM {

class FREQADAPTIVEOFDM_API signal_field : virtual public digital::packet_header_default
{
public:
    typedef boost::shared_ptr<signal_field> sptr;
    static sptr make();

protected:
    signal_field();
};

} // namespace freqAdaptiveOFDM
} // namespace gr

#endif /* INCLUDED_FREQADAPTIVEOFDM_SIGNAL_FIELD_H */

找到错误的行是类FREQADAPTIVEOFDM_API行。 在此先感谢您的帮助!

顺便说一下,我的swig文件如下:

#define freqAdaptiveOFDM_API
#define DIGITAL_API

%include "gnuradio.i"
%include "freqAdaptiveOFDM_swig_doc.i"

%{
#include "freqAdaptiveOFDM/mapper.h";
#include "freqAdaptiveOFDM/signal_field.h"
%}

%include "gnuradio/digital/packet_header_default.h"

%include "freqAdaptiveOFDM/mapper.h"
%include "freqAdaptiveOFDM/signal_field.h"

GR_SWIG_BLOCK_MAGIC2(freqAdaptiveOFDM, mapper);

%template(signal_field_sptr) boost::shared_ptr<gr::freqAdaptiveOFDM::signal_field>;

%pythoncode %{
signal_field_sptr.__repr__ = lambda self: "<signal_field>"
signal_field = signal_field.make;
%}

2 个答案:

答案 0 :(得分:1)

您似乎手动修改了包含文件的部分并将其破坏。

我可以在下面列出一些潜在的问题,但说实话:

只需使用gr_modtool创建一个干净的模块,然后使用gr_modtool add所有要存储的块的存根,然后只需复制所需的实际方法和字段 - 保留{{1}只要你不明白他们在做什么就一个人。

所以,问题:

  • 您有一个名为mapper.h的文件,但它有一个includeguard,可以从另一个文件中清楚地复制和粘贴:#includes。这意味着在某些情况下,只有一个文件是“相关的”,而另一个文件基本上被视为空!维基百科“包括警卫”。
  • 您的#ifndef INCLUDED_FREQADAPTIVEOFDM_SIGNAL_FIELD_H应正确大写。您是否复制并粘贴了内容或整个文件,然后使用自动,不区分大小写的搜索并替换原始模块名称?你可能会意外地破坏了很多东西。基本上,C预处理器和C ++语言中的每一个都是区分大小写的。
  • #define freqAdaptiveOFDM_API看起来并不安全 - 我同意Flexo,有必要在你的swig文件中定义MODULENAME_API宏,但仅限于你自己的模块 - 我不太清楚为什么你需要这个,但我想没有它就没有东西。那么您是否希望从您使用的数字API中对类型进行前向定义?但不太确定 - 可能会有角落有效的角落。

答案 1 :(得分:0)

这很可能是因为FREQADAPTIVEOFDM_API未在SWIG界面的任何位置定义。

删除错误的大写

#define freqAdaptiveOFDM_API

并将其替换为

#define FREQADAPTIVEOFDM_API

在.i文件的顶部应该安全地解决这个问题。