SWIG 不会扩展嵌套宏"Error: Syntax error in input(3)"
SWIG does not expand nested macros "Error: Syntax error in input(3)"
我有一个定义嵌套宏的C++头文件。它可以使用Clang或GCC编译,但SIWG无法正确解析它们。
我可以编译包含头文件的MyClass.cc
。
$ g++ MyClass.cc -c -o MyClass.o
但 SWIG 3.0.2 会生成以下错误。
$ swig -c++ -python MyClass.i
MyClass.h:15: Error: Syntax error in input(3).
如何删除此错误?Util.h
中定义的宏使用此问题中解释的技巧 在参数数上重载宏
Util.h
#ifndef UTIL_H_
#define UTIL_H_
#define GET3(Name, Title, Type)
Type Get##Title() const {
return f##Name;
}
#define ARG_LEN_SWITCH(_1, _2, _3, NAME, ...) NAME
#define GET2(Name, Type) GET3(Name, Name, Type)
#define GET(...) ARG_LEN_SWITCH(__VA_ARGS__, GET3, GET2)(__VA_ARGS__)
#endif // UTIL_H_
MyClass.h
#ifndef MY_CLASS_H_
#define MY_CLASS_H_
#include <iostream>
#include <string>
#include "Util.h"
class MyClass
{
private:
std::string fString;
public:
MyClass(std::string s);
GET(String, std::string)
};
#endif // MY_CLASS_H_
MyClass.cc
#include "MyClass.h"
MyClass::MyClass(std::string s) : fString(s)
{
}
MyClass.i
%module MyClass
%{
#include "Util.h"
#include "MyClass.h"
%}
%include "Util.h"
%include "MyClass.h"
要在SWIG中执行此操作,您必须使用%define
而不是#define
。我不知道为什么,我从来没有设法正确地追踪这个,例如
#define GET3(Name, Title, Type)
Type Get##Title() const {
return f##Name;
}
#define ARG_LEN_SWITCH(_1, _2, _3, NAME, ...) NAME
#define GET2(Name, Type) GET3(Name, Name, Type)
#define GET(...) ARG_LEN_SWITCH(__VA_ARGS__, GET3, GET2)(__VA_ARGS__)
成为:
#define GET3(Name, Title, Type)
Type Get##Title() const {
return f##Name;
}
#define ARG_LEN_SWITCH(_1, _2, _3, NAME, ...) NAME
#define GET2(Name, Type) GET3(Name, Name, Type)
%define GET(...)
ARG_LEN_SWITCH(__VA_ARGS__, GET3, GET2)(__VA_ARGS__)
%enddef
我认为这对你的例子来说应该足够了。
相关文章:
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Error in strcmp C++?
- 修复第三方代码:"error: ‘enable_if’ in namespace ‘std’ does not name a template type"
- 我正在接受"Error: string was not declared in this scope"
- C++ 我一直在"was not declared in this scope error"
- 是什么导致了代码中出现"error LNK2005: already defined in .obj"错误?
- 递归调用中出现错误"[Error] expression list treated as compound expression in initializer [-fpermissive]"
- 编译 CPP 应用程序时出错。 "error: 'posix_memalign' was not declared in this scope"
- "Error: 'dungeon_t' was not declared in this scope"但包含在标题中
- "Error creating variant or safe array" in TClientDataSet.LoadFromStream() in Delphi
- gtest in eclipse error:ld.exe can not find -llibgtest
- "error: not declared in this scope?"是什么意思
- 树莓派"error: stray 255 in program"
- 为什么 *指针+偏移量不能用作 l 值?( "error: non-lvalue in assignment" )
- 子类模板错误 (C++): "error: 'root' was not declared in this scope"
- 很多杂散错误 - "error: stray ‘210’ in program in C++"
- Visual Studio C++ 2010 in-project link error
- Eclipse debug: "Error in final sequence - Failed to execute MI command"
- 为什么我会收到错误"configure: error: Cannot find glib: Is glib-config in path?"?
- 从C++调用 lua 函数时"Error in error handling"