【问题标题】:Cython: Invalid operand types for '+' (btVector3; btVector3)Cython:“+”的操作数类型无效(btVector3;btVector3)
【发布时间】:2013-05-07 05:51:48
【问题描述】:

bullet.pxd:

cdef extern from "bullet/LinearMath/btVector3.h":
    cdef cppclass btVector3:
        btVector3(float, float, float) except +
        btVector3 operator+(const btVector3&, const btVector3&)

btmath.pyx:

cimport bullet as bt

cdef class Vector:

    cdef bt.btVector3* _this

    def __cinit__(self, float x=0, float y=0, float z=0):

        self._this = new bt.btVector3(x, y, z)


    def __add__(Vector self, Vector other):

        vec = Vector()
        del vec._this
        vec._this[0] = self._this[0] + other._this[0]

        return vec

btVector3.h中operator+的原型:

SIMD_FORCE_INLINE btVector3 
operator+(const btVector3& v1, const btVector3& v2);

如标题所述,我得到“'+' (btVector3; btVector3) 的操作数类型无效”。我猜这可能与 Cython 如何处理引用传递有关?

任何帮助将不胜感激。

【问题讨论】:

    标签: cython


    【解决方案1】:

    事实证明,在这种情况下,Cython 将“this”参数视为隐式参数,因此 bullet.pxd 应如下所示:

    cdef extern from "bullet/LinearMath/btVector3.h":
        cdef cppclass btVector3:
            btVector3(float, float, float) except +
            btVector3 operator+(btVector3)
    

    非常感谢 Robert Bradshaw 帮助我解决这个问题:https://groups.google.com/forum/#!topic/cython-users/8LtEE_Nvf0o

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      相关资源
      最近更新 更多