У меня есть следующие CORBA IDL-3.2, который пытается объявить взаимно рекурсивную структуру:Как объявить/использовать прямую ссылку на struct в CORBA IDL?
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.
EDIT: Брайан имел правильный ответ. Мне нужно заменить прямое упоминание о прямой ссылке,
MenuItemAction sub_structure
с
sequence<MenuItemAction> sub_structure>
Я не подумайте, что у вас может быть модуль и интерфейс с тем же именем. В вашем IDL также отсутствуют некоторые закрывающие фигурные скобки. Можете ли вы очистить код? –
Я попытался опубликовать ответ, но мои знания об этой области немного растянуты. Тем временем вы можете проверить эту ссылку, это может быть полезно. http://sandeshudupa.blogspot.com/2006/04/structure-declaration-in-idl-and-its-c.html –
http://www.cs.uic.edu/~troy/fall04/cs441/drake /CORBA.html говорит: «IDL поддерживает прямое объявление построенных типов, например struct Point;». Ваша ссылка также показывает, что это действительно, по крайней мере, в последовательности. Я не могу себе представить, могут ли они поддерживать Sequence , они не могут поддерживать последовательность точно * одного * элемента и, следовательно, непосредственно структуру. –