在 C++ 中创建 PyTuple模块崩溃

发布于 2024-08-12 01:46:51 字数 656 浏览 2 评论 0原文

这段代码遇到一些问题。尝试从我正在编写的 C++ 模块返回元组的元组(坐标)。在我看来是正确的,dirty 列表包含两个 Coord,因此 len 为 2,x 和 <列表中项目的 code>y 值分别为 0,00,1。我第一次尝试这样做,所以我很可能误解了文档或其他内容。有什么提示吗?

PyObject* getDirty()
{
    int len = dirty.size();
    PyObject* tuple = PyTuple_New(len);
    int count = 0;
    for (std::list<Coord>::iterator i = dirty.begin(); i != dirty.end(); ++i)
    {
        PyTuple_SET_ITEM(tuple, count, PyTuple_Pack(2, (*i).x, (*i).y));
        ++count;
    }
    return tuple;
}

编辑:哦,忘了说了,实际崩溃发生在 PyTuple_Set_ITEM 行。

Having some trouble with this code. Trying to return a tuple of tuples (coordinates) from a C++ module Im writing. It looks right to me, the dirty list contains two Coords so len is 2, the x and y values of the items in the list are 0,0 and 0,1 respectively. First time Im attempting this so I might very well have misunderstood the docs or something. Any hints?

PyObject* getDirty()
{
    int len = dirty.size();
    PyObject* tuple = PyTuple_New(len);
    int count = 0;
    for (std::list<Coord>::iterator i = dirty.begin(); i != dirty.end(); ++i)
    {
        PyTuple_SET_ITEM(tuple, count, PyTuple_Pack(2, (*i).x, (*i).y));
        ++count;
    }
    return tuple;
}

Edit: Oh, forgot to mention, the actual crash is on the PyTuple_Set_ITEM line.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

扬花落满肩 2024-08-19 01:46:51

第一个参数之后的 PyTuple_Pack 参数必须是 PyObject 指针。

您可能想要

Py_BuildValue("(ii)", (*i).x, (*i).y)

...假设坐标实际上是 int 类型。

The arguments to PyTuple_Pack, after the first one, must be PyObject pointers.

You might want instead

Py_BuildValue("(ii)", (*i).x, (*i).y)

...assuming the coordinates are actually of type int.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文