Я надеюсь, что вы можете посоветовать мне. Я пытаюсь использовать объектно-ориентированные функции ADA 95 в первый раз, и я хочу, чтобы два производных класса, циклическая группа и полигруппа, вызывали метод put (), принадлежащий их базовому классу,
abstractGroup. Но вместо того, чтобы отслеживать иерархию классов, как я ожидал, компилятор просто говорит мне, что у меня есть несоответствие типов в вызове метода put (). Как мне сказать компилятору распознать связь между объектами?
Вот 5 файлов со всеми посторонними данными и попыткой компиляции:
grpdriver2.adb:
с Ada.Text_IO; использовать Ada.Text_IO;
с Ada.Command_Line; использовать Ada.Command_Line;
с группой товаров2;
с subgrphandler2;
procedure grpdriver2 is
cycg: groupStuff2.cyclicgroup;
polyg: groupStuff2.polygonGroup;
begin
cycg := groupstuff2.createCyclicGroup( 10);
subgrphandler2.put(cycg); -- line 13
------------------------------------------------------------------------------------------------------------------
polyg := groupstuff2.createPolygonGroup( 10);
subgrphandler2.put(polyg); -- line 18
end grpdriver2;
............................................... .................................................. ................
groupstuff2.ads:
с Ada.Text_IO; использовать Ada.Text_IO;
с Ada.Command_Line; использовать Ada.Command_Line;
пакет groupstuff2 is
type abstractGroup is tagged record
x: integer;
end record;
type cyclicGroup is new abstractGroup with record
y: integer;
end record;
function createCyclicGroup( size: in integer) return cyclicGroup ;
----------------------------------------
type polygonGroup is new abstractGroup with record
null;
end record;
function createPolygonGroup( size: in integer) return polygonGroup ;
end groupstuff2;
............................................... ........................................
groupstuff2.adb:
пакет тела groupstuff2 is
procedure put( g: in abstractGroup) is
x: integer;
begin
x := 1;
end put;
function createCyclicGroup( size: in integer) return cyclicGroup is
cycg: cyclicGroup;
begin
cycg.x := size;
return cycg;
end createCyclicGroup;
function createPolygonGroup( size: in integer) return polygonGroup is
polyg: polygonGroup;
begin
polyg.x := size;
return polyg;
end createPolygonGroup;
end groupstuff2;
............................................... ...............................
subgrphandler2.ads:
с Ada.Text_IO; использовать Ada.Text_IO;
с Ada.Command_Line; использовать Ada.Command_Line;
с группой товаров2;
пакет subgrphandler2 равен
procedure put( g: in groupStuff2.abstractGroup);
end subgrphandler2;
............................................... ............................................
subgrphandler2.adb:
тело пакета subgrphandler2 равно
procedure put( g: in groupStuff2.AbstractGroup) is
begin
put("THIS IS A PUT STATMENT");
end put;
end subgrphandler2;
СООТВЕТСТВУЮЩАЯ ПОПЫТКА:
C: \ GNAT \ 2018 \ bin \ ceblang> gnatmake grpdriver2
gcc -c grpdriver2.adb
grpdriver2.adb: 13: 36: ожидаемый тип "abstractGroup" определен в groupstuff2.ads:7
grpdriver2.adb: 13: 36: обнаружен тип "cyclicGroup", определенный в groupstuff2.ads:16
grpdriver2.adb: 18: 36: ожидаемый тип "abstractGroup" определен в groupstuff2.ads:7
grpdriver2.adb: 18: 36: обнаружен тип "polygonGroup", определенный в groupstuff2.ads:25
gnatmake: ошибка компиляции "grpdriver2.adb"