C++ cpythonapi与C++;班
我尝试使用C++类中C/Python API中定义的结构。具体来说,我正在尝试为C++ cpythonapi与C++;班,c++,python,api,C++,Python,Api,我尝试使用C++类中C/Python API中定义的结构。具体来说,我正在尝试为PyMethodDef和PyMemberDef定义一个结构数组(文档如下所示): 对于PyMethodDef,我可以在类头中定义一个静态数组,并在实现文件中声明它。但是,对PyMemberDef执行相同的操作会导致以下错误: error: elements of array 'PyMemberDef members_ []' have incomplete type error: storage size of 'm
PyMethodDef
和PyMemberDef
定义一个结构数组(文档如下所示):
对于PyMethodDef
,我可以在类头中定义一个静态数组,并在实现文件中声明它。但是,对PyMemberDef
执行相同的操作会导致以下错误:
error: elements of array 'PyMemberDef members_ []' have incomplete type
error: storage size of 'members_' isn't known.
我想我可以理解为什么PyMethodDef
有效,而PyMemberDef
无效。在Python源代码中,PyMethodDef
定义如下:
struct PyMethodDef {
...
...
};
typedef struct PyMethodDef PyMethodDef;
typedef struct PyMemberDef {
...
...
} PyMemberDef;
而PyMemberDef
的定义如下:
struct PyMethodDef {
...
...
};
typedef struct PyMethodDef PyMethodDef;
typedef struct PyMemberDef {
...
...
} PyMemberDef;
我通过定义PyMemberDef
代码中的PyMethodDef
方式并确认其编译无误,确认这是问题的原因。然而,我不知道如何纠正这一点。我不希望自己硬编码并重新定义它。
希望这足够清楚。我可以根据要求提供更多细节。
谢谢。如果您尝试使用clang,它将为您提供更有意义的错误消息,如:
pymountboot.cxx:45:20: error: variable has incomplete type 'PyMemberDef'
static PyMemberDef foo_members[] = {
^
/usr/include/python2.7/object.h:381:12: note: forward declaration of 'PyMemberDef'
struct PyMemberDef *tp_members;
^
1 error generated.
因此,这里似乎没有实际声明PyMemberDef
快速grep显示它是在structmember.h
中声明的,而该文件不包括在Python.h
中
然后快速查看上的Python文档,您会注意到该示例以以下内容开头:
#include <Python.h>
#include "structmember.h"
#包括
#包括“structmember.h”
g++在64位linux机器上运行mm,我刚刚尝试了使用clang,它还提供了:/usr/include/python2.7/object.h:381:12:注意:向前声明'PyMemberDef'
,struct PyMemberDef*tp_成员代码>…给我一分钟思考。谢谢。对于使用Python 3.5安装在标准Linux系统上的用户,