[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