相互再帰構造を宣言しようとする次の CORBA IDL 3.2 があります。
module SE
{
interface SE
{
typedef unsigned short MenuItemID; // a small integer representing a unique menu item
enum MenuSubaction { CollectCharacter, CollectStruct };
struct MenuItemAction; // forward declaration
union MenuSubactionParameter switch (MenuSubaction)
{ case CollectStruct: MenuItemAction sub_structure; // <<<<<<<<< use of forward
};
struct MenuItemAction { MenuSubaction menu_subaction;
MenuSubactionParameter menu_subaction_parameter;
};
}; // interface
}; // module
<<<<< でマークされた行で、Sun JDK 1.7 idlj から苦情を受け取ります。
... SE.idl (line xx): Illegal reference to incomplete forward declaration of type MenuItemAction.
注: これは「転送インターフェイス」宣言ではありません。
「不完全な前方宣言」とは何ですか? (前方宣言として正常に宣言された場合、前方宣言が不完全であるとは思わず、まだ定義されていないだけです。おそらく、それは誤解しやすいフレーズです)。
さらに重要なことは、再帰構造を定義するにはどうすればよいでしょうか?
私は CORBA を初めて使用するので、自分が何をしているのかよくわかりません :-}。CORBA がそのような再帰構造を定義できない理由がわかりません。再帰的ではない特定のインスタンスを送信します。特に、これは CORBA が「簡単に」送信できるツリーを形成します。
編集:ブライアンは正しい答えを持っていました。前方参照の直接の言及を置き換える必要がありました。
MenuItemAction sub_structure
と
sequence<MenuItemAction> sub_structure>