У меня возникла проблема с переносом члена класса C++ с помощью SWIG.Проблема с SWIG с указателями
У меня есть класс, который имеет метод, который возвращает map<int, postLib::nastran::element>
.
Класс postLib::nastran::element
в файле интерфейса является:
class element {
public:
element(void) ;
element(const element &in) ;
~element(void) ;
// data manipulation
%feature("docstring", "getType()->int\n\tReturns 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;
}
Когда я вызываю метод GetType() в случаях элемент из Python Я получаю следующее сообщение об ошибке сообщение:
pure virtual method called
Класс элемента наследуется от другого mo re generic element, который определяет getType как виртуальный.
Любые идеи?
Заранее спасибо.