C++ cpythonapi与C++;班

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

我尝试使用C++类中C/Python API中定义的结构。具体来说,我正在尝试为
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系统上的用户,