You can forward declare structs, but there are many restrictions.
Edit: I don't know what version of CORBA you are using, but in the 2.6.1 specification it says in section 3.10.2.3 (emphasis mine):
The IDL syntax allows the generation of recursive structures and unions via members that have a sequence type.
And later:
IDL supports recursive types via a forward declaration for structures and unions (as well as for valuetypes).
And later:
An incomplete type can only appear as the element type of a sequence definition. A sequence with incomplete element type is termed an incomplete sequence type.
An incomplete sequence type can appear only as the element type of another sequence, or as the member type of a structure or union definition.
Example:
struct Foo; // Forward declaration; Foo is incomplete
typedef sequence<Foo> FooSeq; // incomplete sequence type
struct Foo {
long value;
FooSeq chain; // incomplete seq. type used as struct member; OK
};
Much more information can be found in the link, including this example, which may be closer to what you want to do:
union Bar; // Forward declaration
typedef sequence<Bar> BarSeq;
union Bar switch(long) { // Define incomplete union
case 0:
long l_mem;
case 1:
struct Foo {
double d_mem;
BarSeq nested; // OK, recurse on enclosing
// incomplete type
} s_mem;
};