SWIG指针问题
SWIG issue with pointers
我在用SWIG包装C++类的成员时遇到问题。
我有一个类,它有一个返回map<int, postLib::nastran::element>
的方法。
接口文件中的类postLib::nastran::element
为:
class element {
public:
element(void) ;
element( const element &in) ;
~element(void) ;
// data manipulation
%feature("docstring", "getType()->intntReturns an id corresponding to the TYPE of FE element") getType;
int getType(void) const ;
std::string getTypeName(void) const ;
int getNbrNodes(void) const ;
int getNode(int index) const ;
/*
%extend {
std::set<int> getNodes(void) {
const std::set<int> *siList;
siList = &$self->getNodes();
return *siList;
}
}*/
} ; //class element
我的方法是这样的:
PyObject * getEls(void) {
std::map<int, postLib::nastran::element> els = $self->getElements();
std::map<int, postLib::nastran::element>::iterator it;
//PyObject * result = PyDict_New();
PyObject * result = PyList_New(els.size());
for (std::map<int, postLib::nastran::element>::iterator it=els.begin(); it!=els.end(); ++it) {
PyObject * k = Py_BuildValue("i", (it->first)-1);
postLib::nastran::element * e = &(it->second);
//PyObject * v = Py_BuildValue("i", &(it->second));
PyObject *v = SWIG_NewPointerObj((void *)e, SWIGTYPE_p_postLib__nastran__element, SWIG_POINTER_OWN);
//PyDict_SetItem(result, k, v);
PyList_SetItem(result, (it->first)-1, v );
std::cout << typeid(&it->second).name() << std::endl;
}
return result;
}
当我在Python的元素实例上调用方法getType()时,我得到以下错误消息:
pure virtual method called
元素类继承自另一个更通用的元素类,该类将getType定义为virtual。
有什么想法吗?
提前谢谢。
我从未在Python语言中使用过swig,但我在制作Java包装器时遇到过这个错误,希望它也是一样。
当您从Python调用getType成员方法时会出现此错误,因为它是C++纯虚拟方法,这意味着它没有实现,并且打算由子类覆盖/实现。因此,基本上从Python调用的是一个未实现的方法。
postLib::nastran::element
是否将该方法声明为虚拟并等于0,类似于:
virtual int getType(void) const = 0;
如果是,那么它是纯虚拟的,并且在你的.i文件中没有这样声明它。当SWIG遇到一个具有纯虚拟方法的类时,它不会为该类型生成构造函数(因为您无法实例化缺少实现的东西)。
如果该方法是纯虚拟的,那么该类将被子类化。Swig可以使用directors
功能来实现这一点,因此您可以从Python扩展C++类并使用它。
相关文章:
- 关于 c++ 函数中指针赋值的简单问题
- 链表指针问题
- C++ 关于指针取消引用的技术问题
- C++中的指针和常量问题不大
- 包含矢量指针的结构的内存释放问题
- 指针问题:从不兼容的类型"int"分配给"int *"
- 将字节数组转换为带有字节序问题的指针
- 关于如何使用指向主窗口的指针的 QT 问题
- 当成员值从指针更改为非指针时,C++常量问题
- 为什么循环会导致指针出现问题?
- 使用指针计算堆栈问题的大 O 表示法
- 构造函数 (C++) 中的 char 指针参数存在问题
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- 涉及指针和手动实现的矩阵类的问题
- 从基指针到派生的强制转换问题
- 迭代器的指针操作问题
- 64 位迁移问题:指针更改
- C++模板使用问题指针
- 跳到C++第13章练习问题4-指针
- 用std::pair数组初始化std::map问题(指针错误?)