Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Другие языки > [Ada] Наследование настраиваемых пакетов.


Автор: lc0d3r 15.10.2009, 18:44
Возникла проблема с наследованием настраиваемых пакетов. Давайте попорядку:

есть следующие пакеты

Код

generic
    N : Positive;

package VectorUnit is
   subtype TElement is Integer;
   subtype TIndex is Positive;

........................................................................


наследуемый от него 
Код


generic
    N : Positive;

package VectorUnit.MatrixUnit is

........................................................................


и еще один который наследует два предыдущие

Код


generic
    N : Positive;

package VectorUnit.MatrixUnit.F3Unit is


........................................................................



когда же мы начинаем использовать эти пакеты в основном модуле

Код

with Ada.Text_Io; use Ada.Text_Io;      
with Ada.Integer_Text_Io; use Ada.Integer_Text_Io; 

with VectorUnit, VectorUnit.MatrixUnit, VectorUnit.MatrixUnit.F3Unit, VectorUnit.MatrixUnit.IOUnit;

procedure main is
    N : constant integer := 3;

            package VectorU is new VectorUnit(N);
    package MatrixU is new VectorU.MatrixUnit(N);
    package F3UnitU is new VectorU.MatrixUnit.F3Unit(N);        

    
            use VectorU, MatrixU;    


то настройка и подключение первых двух проходит нормально, а вот с третим возникают ошибки
вариант вида
Код

           package F3UnitU is new MatrixU.F3Unit(N);


тоже не работает. Вопрос состоит в том, чтобы оставить дженерики и наследование и заставить работать наследование.
Заранее спасибо за ответы.

Автор: volvo877 18.10.2009, 19:48
Цитата(lc0d3r @  15.10.2009,  18:44 Найти цитируемый пост)
а вот с третим возникают ошибки
Правильно возникают... Вот так - не должны возникать:
Код
    package VectorU is new VectorUnit(N);
    package MatrixU is new VectorU.MatrixUnit(N);
    package F3UnitU is new MatrixU.F3Unit(N);


Автор: lc0d3r 19.10.2009, 13:56
volvo877,  я же писал в посте выше, что так тоже пишет о ошибке
ежели небыло бы ошибки, я бы тут это не спрашивал smile

вот что конкретно пишет при Вашем варианте

Цитата

F3Unit was not found in the region of MatrixU, Ignoring future referances

Автор: volvo877 19.10.2009, 14:04
Цитата(lc0d3r @  19.10.2009,  12:56 Найти цитируемый пост)
 я же писал в посте выше, что так тоже пишет о ошибке
ежели небыло бы ошибки, я бы тут это не спрашивал
Ты очень удивишься, но GNAT ошибки не выдает, все нормально компилируется, проверил специально. Может, у тебя что-то в самих пакетах не то? Присоедини его сюда полностью (если не секретная разработка, конечно smile ), я проверю на своем компиляторе (можно в приват, кстати, или на мыло (volvo71<мяу>yandex.ru), если все же не хочешь показывать проект публично)...

Автор: lc0d3r 19.10.2009, 15:40
volvo877, большое спасибо за ответы, возможно моя проблема в том, что я использую Object Ada, а ты gnat.

Отправил тебе на почту весь проект. 

Автор: volvo877 19.10.2009, 16:45
Цитата(lc0d3r @  19.10.2009,  14:40 Найти цитируемый пост)
возможно моя проблема в том, что я использую Object Ada, а ты gnat
Угу... После переименования файлов (MatrixUnit.adb -> VectorUnit-MatrixUnit.adb, IOUnit.adb -> VectorUnit-MatrixUnit-IOUnit.adb) и так далее (как того требует GNAT) все завелось и откомпилировалось (ну, предупреждение в VectorUnit-MatrixUnit-IOUnit.adb касательно того, что J может быть неинициализирована в момент обращения, я пока проигнорировал, вопрос не в нем...)

Так что, что-то OA не то делает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)