Cython - 尝试访问struct指针的内容时出错

时间:2015-03-11 23:46:02

标签: python c pointers struct cython

我在Cython中有一个cdef ed类,看起来与此类似:

cdef class AprilTagDetector:
    cdef capriltag.apriltag_detector_t* _apriltag_detector

    def __cinit__(self):
        self._apriltag_detector = capriltag.apriltag_detector_create();
        # standard null checks
    # standard __dealloc__(self) here

    property quad_decimate:
        def __get__(self):
            return self._apriltag_detector.quad_decimate

相应的.pxd文件如下所示:

cdef extern from "apriltag.h":
    # The detector itself
    ctypedef struct apriltag_detector_t:
        pass

    # Detector constructor and destructor
    apriltag_detector_t* apriltag_detector_create()
    void apriltag_detector_destroy(apriltag_detector_t* td);

问题是,当我去编译这段代码时,它会吐出这个错误:

property quad_decimate:
    def __get__(self):
        return self._apriltag_detector.quad_decimate             ^
------------------------------------------------------------

apriltags.pyx:47:14: Cannot convert 'apriltag_detector_t *' to Python object

这里发生了什么?我无法从Cython文档中找到它。

1 个答案:

答案 0 :(得分:0)

谢天谢地,我和一个黑客空间的朋友在这个项目上工作时想出了问题。 问题出在ctypedef struct apriltag_detector_t块中。 当我在块中编写pass时,我认为Cython会自动计算出结构的内部内容,让我访问我需要的元素 - 这里,quad_decimate

不是这样。 为了让Cython理解结构的内容,必须告诉它结构中的内容如下:

ctypedef struct apriltag_detector_t:
    float quad_decimate