C++类的Cython API JaveWin

2024-10-01 19:15:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用C++类中C/Python API中定义的结构。具体来说,我正试图为PyMethodDefPyMemberDef定义一个结构数组(文档是here):

对于PyMethodDef,我可以在类头中定义一个静态数组,并在实现文件中声明它。但是,对PyMemberDef执行相同的操作会导致以下错误:

error: elements of array 'PyMemberDef members_ []' have incomplete type
error: storage size of 'members_' isn't known.

我想我能理解为什么PyMethodDef起作用,而{}不起作用。在Python源代码中,PyMethodDef的定义如下:

^{pr2}$

鉴于PyMemberDef的定义如下:

typedef struct PyMemberDef {
   ...
   ...
} PyMemberDef;

我通过定义PyMemberDef在我的代码中PyMethodDef的方式来确认这是问题的原因,并确认它编译没有错误。但是,我不知道该怎么纠正。我宁愿不硬编码,自己重新定义它。 希望这足够清楚。我可以根据要求提供更多细节。 谢谢。在


Tags: of文档apihere定义错误静态error
1条回答
网友
1楼 · 发布于 2024-10-01 19:15:36

如果您尝试使用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中。在

然后快速查看Defining new types上的Python文档,您会注意到该示例以以下内容开头:

^{pr2}$

相关问题 更多 >

    热门问题