2009-09-03 4 views
2

Ich versuche, einige C-Code in Python mit Pyrex zu wickeln. Ich bin auf ein Problem mit der Definition von zwei Strukturen gestoßen. In diesem Fall wurden die Strukturen in Bezug aufeinander definiert, und Pyrex scheint den Konflikt nicht zu bewältigen. Die Strukturen sehen in etwa so aus:Wrapping gegenseitig abhängiger Strukturen in Pyrex

typedef struct a { 
    b * b_pointer; 
} a; 

typedef struct b { 
    a a_obj; 
} b; 

Sie befinden sich in verschiedenen Dateien. Der Code, den ich um die Strukturen zu wickeln bin mit wie folgt aussieht:

def extern from "file.c": 
    ctypdef struct a: 
      b * b_pointer 
    ctypedef struct b: 
      a a_obj 

File.c ist eine separate Datei Funktionsdefinitionen enthält, in Bezug auf die Strukturdefinitionen im Gegensatz, aber es enthält die Quelldateien, die diese Strukturen definieren. Gibt es eine Möglichkeit, diese beiden Strukturen zu umhüllen?

Antwort

3

können Sie verwenden, um eine incomplete type (Sie das entsprechende C tun müssen typedefs in in einer .h Datei zu sein, nicht nur eine .c-Datei):

cdef extern from "some.h": 
    ctypedef struct b 
    ctypedef struct a: 
    b * b_pointer 
    ctypedef struct b: 
    a a_obj