我有类似的东西在C++文件中,组成我痛饮模块:SWIG C++/Python的:继承代理对象
class CObject {
public:
void do() {
// some treatments
}
};
class Interface {
public:
void add(CObject* obj) {
obj->do();
}
};
在Python代码,即使用我痛饮模块,有这样的事情:
from mySwigModule import Interface, CObject
class MyObj(CObject):
def __init__(self):
super(CObject, self).__init__()
inter = Interface()
inter.add(MyObj()) // ERROR
此代码是非常基本的。真正的一个处理较大的对象。 但问题是:运行Python代码时,类似的东西印:
NotImplementedError: Wrong number or type of arguments for overloaded function 'Interface_add'.
Possible C/C++ prototypes are:
Interface::add(CObject *)
我如何解释痛饮如何在CObject的投的对象?
当然这与类型地图有关,但我不知道具体是什么。 我尝试添加该接口文件,没有成功:
%typemap(in) CObject * {
if ((SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor)) == -1) {
$1 = (CObject *) $1;
}
}
在编译返回的错误是一样的东西:
error: macro "SWIG_ConvertPtr" requires 4 arguments, but only 3 given
In function ‘PyObject* _wrap_Interface_add__SWIG_0(PyObject*, PyObject*)’:
error: ‘SWIG_ConvertPtr’ was not declared in this scope
在实际的代码,接口:: Add()方法被调用2参数。也许typemaps需要指定其他参数的类型?
的Debian,蟒3.2,SWIG 2.
编辑:真正的错误是展示。
我已经在与Python过去的一些问题,删除我痛饮对象。你可以试试:'my_obj = MyObj()',然后调用'inter.add(my_obj)'。 – MasterMind 2014-09-22 15:28:42
经过测试后,即使我在使用'mySwigModule'的类的类属性中存储'my_obj',它也不会改变任何内容。但是,当我把它放在一个全局变量中时,C++代码拒绝这个对象,因为它不是一个CObject类型:NotImplementedError:错误的数字或者重载函数参数的类型'Interface_add' – aluriak 2014-09-23 09:44:34
这可能是一个错字,但是这一行在你的.h中似乎是错误的:'void add(CObjects * obj)'还有一个's'。 – MasterMind 2014-09-23 12:31:20