Проблема в вашем коде в том, что для Cython "FOO"
является Python-объектом.Для выражений типа
char *s = "FOO"
Cython достаточно умен, чтобы понять, что вы хотите, и автоматически интерпретирует "FOO"
как char *
.
Однако, Cython на самом деле не "понимает" /интерпретировать подписи обернутых c ++ - функций (для этого это должен быть c ++ - компилятор) и поэтому не может знать, что вы хотите, чтобы "FOO"
был char *
.
Таким образом, вы должны помочь Cython, дляпример:
status = <const char *>"FOO"
Вам также нужно обойти проблему со ссылкой, например, с помощью:
cdef public void setStatus(MyStatus *status):
status[0] = <const char *>"FOO"
или если вы хотите сохранить сигнатуру функции без изменений:
cdef public void setStatus(MyStatus& status):
cdef MyStatus * as_ptr = &status
as_ptr[0] = <const char *>"FOO"
Я не совсем уверен, что проблема с назначением ссылки не является ошибкой.
Еще одно наблюдение: операторы назначения не являются частью "официального" переносастандартные контейнеры, см. здесь или здесь .