gpt4 book ai didi

c++ - CPython API 与 C++ 类相结合

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:27 24 4
gpt4 key购买 nike

我正在尝试在 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 有效但 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com