使用 swig 时出错:输入 (1) 中的语法错误
Error using swig: Syntax error in input(1)
我对 swig 很陌生,我遇到了一个找不到的错误。错误是:
/home/investigador/OMICRON-GNURadio/gr-freqAdaptiveOFDM/swig/../include/freqAdaptiveOFDM/mapper.h:39:错误:input(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行。 提前感谢您的帮助!
顺便说一下,我的wig文件如下:
#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;
%}
这很可能是因为 SWIG 界面中没有定义FREQADAPTIVEOFDM_API
。
删除错误大写
#define freqAdaptiveOFDM_API
并将其替换为
#define FREQADAPTIVEOFDM_API
在您的.i文件的顶部应该安全地解决这个问题。
您似乎手动修改了包含文件的某些部分并破坏了它。
我可以在下面列出一些潜在的问题,但说实话:
只需使用gr_modtool
创建一个干净的模块,然后gr_modtool add
你想要的块的所有存根,然后复制你需要的实际方法和字段——只要你不真正理解它们在做什么,就不要管#includes
。
所以,问题:
- 您有一个称为mapper.h的文件,但它有一个包含卫士,清楚地从另一个文件复制并粘贴:
#ifndef INCLUDED_FREQADAPTIVEOFDM_SIGNAL_FIELD_H
。这意味着在某些情况下,只有一个文件是"相关"的,而另一个基本上被视为空的!维基百科"包括警卫"。 - 您的
#define freqAdaptiveOFDM_API
应正确大写。您是否可能复制并粘贴内容或整个文件,然后使用自动、不区分大小写的搜索并替换原始模块名称?你可能以这种方式不小心破坏了很多东西。基本上,C 预处理器和C++语言中的每一个都是区分大小写的。 #define DIGITAL_API
看起来并不安全——我同意 Flexo,有必要在你的 swig 文件中定义MODULENAME_API宏,但只针对你自己的模块——我不太确定你为什么需要它在这里,但我想没有它的东西就不会构建。因此,也许您想从您使用的数字 API 中对类型进行前向定义?不过,不太确定 - 可能存在有效的极端情况。
相关文章:
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 我该怎么做才能摆脱使用命名空间时的语法错误?
- 如何摆脱错误c2061;语法错误 cout?
- 语法错误:D3DX10Core 中的标识符'TEXTMETRICA'
- 错误 C2146:语法错误:标识符"A1"之前缺少","
- main.cpp(11):错误 C2059:语法错误:"字符串"
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 如何修复此 FSM C++语法错误 C3867
- 函数错误 C2059:语法错误:'>'不起作用
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- c++default-int中的语法错误
- "pip install openexr"上的语法错误:错误的编译器?
- 为什么我收到语法错误:在"*"之前缺少";"
- 错误 C2059:语法错误:从结构成员声明'constant'
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 我正在调试这个C++程序.编译器不再显示语法错误,但存在隐藏的逻辑错误