2013-04-23 3 views
0

меня проблема с массивом и объектом в IDL CORBA Это мой код:ошибка массива и объекта в IDL CORBA

interface ISinhVien 
{ 
    SinhVien[] DocFile(in String filename); 
    void GhiFile(in SinhVien[] sv,in String filename); 
}; 

И ошибка, когда я скомпилировать его:

CORBA_SinhVien>idlj -fall SinhVienIDL.idl 
SinhVienIDL.idl (line 3): SinhVien is an undeclared type. 
     SinhVien[] DocFile(in String filename); 
     ^
SinhVienIDL.idl (line 3): Expected `<identifier>'; encountered `['. 
     SinhVien[] DocFile(in String filename); 
     ^
SinhVienIDL.idl (line 3): WARNING: Identifier `String' collides with a keyword; 
use an escaped identifier to ensure future compatibility. 
     SinhVien[] DocFile(in String filename); 
        ^
SinhVienIDL.idl (line 4): SinhVien is an undeclared type. 
     void GhiFile(in SinhVien[] sv,in String filename); 
         ^
SinhVienIDL.idl (line 4): Expected `<identifier>'; encountered `['. 
     void GhiFile(in SinhVien[] sv,in String filename); 
         ^
SinhVienIDL.idl (line 4): WARNING: Identifier `String' collides with a keyword; 
use an escaped identifier to ensure future compatibility. 
     void GhiFile(in SinhVien[] sv,in String filename); 

Somebody Помоги мне, пожалуйста !!!!!!!!!!!!!!!!!!!!

ответ

1

CORBA language specification не позволяет возвращать массивы любого типа, если они не указаны в начале typedefed.

У вас есть 2 варианта: фиксированные массивы или sequences - последний более гибкий, позволяя задать размер массива с помощью реализующего кода.

interface SinhVien { 
    boolean someOperation(in long id); 
    // more operations 
}; 

typedef sequence<SinhVien> sinhviens; 


interface ISinhVien 
{ 
    sinhviens docFile(in string filename); 
    void ghiFile(in sinhviens sv, in string filename); 
}; 

Помимо: Будьте осторожны, чтобы не смешивать синтаксис Java с синтаксисом IDL: string появляется как все строчной.

+0

Я редактирую код, следуя вашей помощи! этот мой код отредактирован: typedef sequence sinhviens; Интерфейс ISinhVien { \t sinhviens DocFile (в строке имени файла); \t void GhiFile (in sinhviens sv, in string filename); } , но получил ошибку: SinhVienIDL.idl (строка 1): SinhVien - незадекларированный тип. typedef sequence sinhviens; помогите мне, пожалуйста! –

+0

Как говорится в ошибке, вам нужно определить тип 'SinhVien'. Это может быть либо «интерфейс», либо «struct». Вы можете сделать это в том же файле IDL или с помощью директивы '# include' – Reimeus

+0

, которую вы можете объяснить мне? Я начинаю –

Смежные вопросы