我正在尝试在 C++ 类中使用 C/Python API 中定义的结构。具体来说,我正在尝试为 PyMethodDef
和 PyMemberDef
定义一个结构数组(文档为 here ):
对于 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;
而 PyMemberDef
是这样定义的:
typedef struct PyMemberDef {
...
...
} PyMemberDef;
我通过在我的代码中定义 PyMemberDef
的方式确认这是问题的原因,并确认它编译没有错误。但是,我不知道如何纠正这个问题。我不想自己硬编码和重新定义它。
希望这已经足够清楚了。我可以根据要求提供更多详细信息。
谢谢。
最佳答案
如果您尝试使用 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 文档您可能会注意到该示例以:
#include <Python.h>
#include "structmember.h"
关于c++ - CPython API 与 C++ 类相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12044036/