Python C API:T_INT未在此范围内声明 我在下面为Python创建一个C++的简单扩展类型。但是我无法成功编译我的代码。因为当我在代码中使用T_INT时,我得到一个错误,说'T_INT'未在此范围内声明。我忘了什么吗?我在教程中找不到答案 这是我的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; }

Python C API:T_INT未在此范围内声明 我在下面为Python创建一个C++的简单扩展类型。但是我无法成功编译我的代码。因为当我在代码中使用T_INT时,我得到一个错误,说'T_INT'未在此范围内声明。我忘了什么吗?我在教程中找不到答案 这是我的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; },python,c++,python-3.x,python-c-api,Python,C++,Python 3.x,Python C Api,我得到的第一个错误是: tt.cpp:10:11: error: 'T_INT' was not declared in this scope 我的g++版本是7.3.0是的,您忘记了一些东西,特别是教程中包含的两个版本中的第二个: #include "structmember.h" 这是一个提供T\u INT。(查看现有的导入,您可能会在python3.6/structmember.h中看到它。)我认为您忘记了在代码中添加另一个include语句 你能试一下吗 #包括“structmemb

我得到的第一个错误是:

tt.cpp:10:11: error: 'T_INT' was not declared in this scope

我的
g++
版本是
7.3.0

是的,您忘记了一些东西,特别是教程中包含的两个版本中的第二个:

#include "structmember.h"

这是一个提供
T\u INT
。(查看现有的导入,您可能会在python3.6/structmember.h中看到它。)

我认为您忘记了在代码中添加另一个include语句

你能试一下吗

#包括“structmember.h”

在你的代码中(也许你需要搜索标题),就像你包含的一样
#在代码中包含
,您可能必须这样做
#包括python3.6/structmember.h
,同样的问题还有另一个答案。

谢谢。这解决了我的问题。我尝试了
#include“structmember.h”
,但没有找到。但是我的问题是我忘了
#包括“python3.6/structmember.h”
。如果你提到我的完整答案,我也提到了。是的,我注意到了。)谢谢这解决了我的问题。我尝试了
#include“structmember.h”
,但没有找到。但是我的问题是我忘了
#包括“python3.6/structmember.h”
#include "structmember.h"