[Pyrex] C++ forward declaration

Robert Bradshaw robertwb at math.washington.edu
Fri Apr 4 01:26:59 CEST 2008


On Apr 3, 2008, at 4:20 PM, Ravi Lanka wrote:
> Pyrex gurus,
>
>    I am trying to wrap two C++ classes in a Namespace called
> "MyNameSpace".  I was breezing through using some of the ideas  
> shared by
> Lenard and others.  I got stuck with a case of forward declaration as
> below.  The two classes I have, A and B, have methods that require the
> objects corresponding to B and A.  If I try to declare, say class B,
> without all the methods before class A and then try to create the
> complete code for class B, it complains that class B is re-declared.
> How do I get around this problem ?
>
> cdef extern from "A.h":
>     ctypedef struct A "MyNameSpace::A":
>         void (*foo)( B data )
>
> cdef extern from "B.h":
>     ctypedef struct B "MyNameSpace::B":
>         void (*bar)( A data )
>
> thanks
> Ravi

I believe you have to do a forward declaration. The following works  
for me:


cdef extern from "B.h":
     ctypedef struct B

cdef extern from "A.h":
     ctypedef struct A "MyNameSpace::A":
         void foo(B data)

cdef extern from "B.h":
     ctypedef struct B "MyNameSpace::B":
         void bar(A data)

cdef A a
cdef B b

# this will compile...but don't run it
a.foo(b)
b.bar(a)


- Robert



More information about the Pyrex mailing list