Невозможно определить функцию Cython без ошибок ⇐ Python

Программы на Python
Anonymous
Невозможно определить функцию Cython без ошибок

Сообщение Anonymous »

Это фрагмент кода, который я выполнил и который выдал ошибку при компиляции с помощью cython

Код: Выделить всё

def __cinit__(self, bitboards = BITBOARDS, board_data = boarddata):
memcpy(self.bitboards, bitboards, 768)
self.board_data = board_data
Ошибка:

Код: Выделить всё

def __cinit__(self, bitboards = BITBOARDS, board_data = boarddata):
memcpy(self.bitboards, bitboards, 768)
^
------------------------------------------------------------

brains.pyx:723:25: Cannot convert Python object to 'const void *'
Я не могу понять причину этой ошибки. Все упомянутые глобальные переменные были инициализированы. self.bitboard и self.board_data также были инициализированы, но не назначены.
Минимальный воспроизводимый пример:
ошибка компилятора выдается при компиляции следующего кода (та же ошибка, что и выше)

Код: Выделить всё

cimport cython
from libc.string cimport memcpy

ctypedef (unsigned long long) U64

cdef U64[2] a = [0, 0]
cdef class test:
cdef U64[2] b
def __cinit__(self, param1 = a):
memcpy(self.b, param1, sizeof(param1))

c = test()
Изменить: получив несколько предложений, я выполнил следующее:

Код: Выделить всё

cimport cython
from libc.string cimport memcpy

ctypedef (unsigned long long) U64

cdef U64[2] a = [0, 0]
cdef class test:
cdef U64[2] b

def __cinit__(self):
pass

cpdef void set(self, U64[2] param1):
memcpy(self.b, param1, 128)

c = test()
c.set(a)
Приведенный выше код выдал следующее сообщение об ошибке:

Код: Выделить всё

        cdef U64[2] b

def __cinit__(self):
pass

cpdef void set(self, U64[2] param1):
^
------------------------------------------------------------

test.pyx:13:10: Cannot convert 'U64 *' to Python object
Есть ли какое-нибудь решение этой проблемы? Есть ли другой способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/790 ... out-errors

Вернуться в «Python»