Из того, что я прочитал до сих пор cdef
не является эквивалентом typedef
.Вместо этого вы объявляете C
переменные.Попробуйте использовать ctypedef
вместо этого, как описано в ссылке.
РЕДАКТИРОВАТЬ: немного больше объяснений.Когда вы используете cdef mystruct* my_val
, вы не выполняете typedef
, вместо этого вы объявляете C
переменную my_val
, которая имеет тип mystruct *
.Теперь, когда вы пытаетесь использовать его как спецификатор типа, как в вашем классе, он, конечно, говорит вам, что это не спецификатор, поскольку он является переменной.Если вы используете ctypedef
вместо этого, он выполняет typedef
ctypedef mystruct *my_val
для второго cdef struct mystruct* my_val
, он выдает синтаксическую ошибку, потому что синтаксис cdef
type name и, таким образом, вы пытаетесь инициализировать переменную с именем mystruct*
типа struct
, а за ней также стоит завершающее выражение my_val
.