Как объявить связанные списки с указателями в Cython - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь создать связанный список в Cython для следующего кода C:

typedef struct my_struct *my_val;

typedef struct my_struct {
      int i;
      my_val next_val;
}

Это не сработало:

 cdef my_struct* my_val

 cdef struct bc_struct:
      int i
      my_val next_val

Я получаю эту ошибку в первый разcdef:

'my_val' is not a type identifier

Ни один не сделал это:

cdef struct my_struct* my_val

Это дает ошибку на первом cdef:

Syntax error in struct or union definition

Любая помощь оченьоценили!

1 Ответ

0 голосов
/ 30 ноября 2018

Из того, что я прочитал до сих пор 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.

...