Я следую официальному руководству по Python API , чтобы создать простой тип расширения в C ++ для Python. Но я не могу получить успешно скомпилированный код. Потому что когда я использую T_INT
в своем коде, я получаю сообщение об ошибке 'T_INT' was not declared in this scope
Я что-нибудь забыл? Я не могу найти ответ в учебнике.
Вот мой код C ++:
#define PY_SSIZE_T_CLEAN
#include <python3.6/Python.h>
#include <stddef.h>
typedef struct {
PyObject_HEAD
int num;
} MyObject;
static PyMemberDef MyMembers[] = {
{ "num", T_INT, offsetof(MyObject, num), 0, NULL },
{ NULL }
};
static PyTypeObject MyType = []{
PyTypeObject ret = {
PyVarObject_HEAD_INIT(NULL, 0)
};
ret.tp_name = "cpp.My";
ret.tp_doc = NULL;
ret.tp_basicsize = sizeof(MyObject);
ret.tp_itemsize = 0;
ret.tp_flags = Py_TPFLAGS_DEFAULT;
ret.tp_new = PyType_GenericNew;
ret.tp_members = MyMembers;
return ret;
}();
static PyModuleDef moddef = []{
PyModuleDef ret = {
PyModuleDef_HEAD_INIT
};
ret.m_name = "cpp";
ret.m_doc = NULL;
ret.m_size = -1;
return ret;
}();
PyMODINIT_FUNC
PyInit_cpp(void)
{
PyObject *mod;
if (PyType_Ready(&MyType) < 0)
return NULL;
mod = PyModule_Create(&moddef);
if (mod == NULL)
return NULL;
Py_INCREF(&MyType);
PyModule_AddObject(mod, "My", (PyObject *)&MyType);
return mod;
}
Я компилирую с помощью следующей команды:
g++ -std=c++11 -shared -fPIC -o cpp.so tt.cpp
И первая ошибка, которую я получил:
tt.cpp:10:11: error: 'T_INT' was not declared in this scope
Моя g++
версия 7.3.0