Generics Ada…程序无法从主菜单中看到
我刚开始学习Ada,我很难理解它 我有main.adb、createlist.adb和createlist.ads(要遵循的代码) 我发现了错误 “打印列表”不可见(后面有更多参考) createlist.ads处的不可见声明:(无论行号如何) 对于每个过程和功能 我在main中尝试了它,它在那里工作,所以我已经知道当程序可见时,它们应该做什么。我只是不知道我做错了什么让他们看不见。我已经在课堂笔记、谷歌、github、这里和其他各种论坛上找到了答案,但还没有找到解决方案 main.adbGenerics Ada…程序无法从主菜单中看到,generics,ada,Generics,Ada,我刚开始学习Ada,我很难理解它 我有main.adb、createlist.adb和createlist.ads(要遵循的代码) 我发现了错误 “打印列表”不可见(后面有更多参考) createlist.ads处的不可见声明:(无论行号如何) 对于每个过程和功能 我在main中尝试了它,它在那里工作,所以我已经知道当程序可见时,它们应该做什么。我只是不知道我做错了什么让他们看不见。我已经在课堂笔记、谷歌、github、这里和其他各种论坛上找到了答案,但还没有找到解决方案 main.adb wi
with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Float_Text_IO;
use Ada.Float_Text_IO;
with CreateList;
procedure Main is
max: integer;
pointer: integer;
len: integer;
package IntIO is new Ada.Text_IO.Integer_IO(Integer); use IntIO;
begin
Put("What size is the array? ");
get(max);
declare
list: array (1 .. max) of Integer;
begin
list := (others => 0);
pointer := 0;
len := 0;
print_list;
add_to_list(12);
add_to_list(3);
add_to_list(7);
print_list;
len := length_of_list;
for pointer in 1 .. len loop
print_list;
end loop;
Put_Line("");
delete_from_list(2);
print_list;
end;
end Main;
createlist.adb
with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Float_Text_IO;
use Ada.Float_Text_IO;
package body CreateList is -- in file CreateList.adb
len: Integer;
list: array(1..max) of itemType;
procedure add_to_list (ListItem: in itemType) is begin
if pnt >= max then
Put_Line("**Detected Overflow**");
else
pnt := pnt + 1;
list(pnt) := ListItem;
end if;
null;
end add_to_list;
procedure delete_from_list (indx: in Integer) is begin
if indx = 0 then
Put_Line("**Detected Underflow**");
else
for j in indx .. (pnt - 1) loop
if j < len then
list(j) := list(j + 1);
end if;
end loop;
pnt := pnt - 1;
end if;
null;
end delete_from_list;
function length_of_list return Integer is begin
return len;
end length_of_list;
procedure print_list (indx: in Integer) is begin
Put(list(indx));
Put(" ");
null;
end print_list;
procedure print_list is begin
for i in 1 .. max loop
Put(list(i));
Put(" ");
end loop;
Put_Line("");
null;
end print_list;
end CreateList;
我传递指针时也有困难
感谢您的帮助。了解可见性是理解Ada的关键。正如错误消息所说,在主过程中看不到任何名为Print_List的内容。如果Createlist是一个包,则可以调用程序Print_List,该程序声明为
Createlist.Print_List
但是Createlist不是一个pkg,它是一个泛型pkg,所以只能通过泛型实例化的过程来创建pkg:包实例化\u Name是新的Createlist(Max=>42,Itemtype=>where)代码>如果您已经这样做了,那么您可以调用实例化\u Name.Print\u List
或实例化了泛型包后,您可以使用实例化\u名称代码>和程序将可见。如果为不同的类型实例化两次,其中大多数将显示,并按其参数类型正确解析,但无参数printlist
不会显示。这很好:它让你使用实例化\u Name.printlist
来打印正确的列表。实例化得到了它。多谢各位much@JesseSchultz:请回答您的问题以显示您修改过的方法,或者您可以。理解可见性是理解Ada的关键。正如错误消息所说,在主过程中看不到任何名为Print_List的内容。如果Createlist是一个包,则可以调用程序Print_List,该程序声明为Createlist.Print_List
但是Createlist不是一个pkg,它是一个泛型pkg,所以只能通过泛型实例化的过程来创建pkg:包实例化\u Name是新的Createlist(Max=>42,Itemtype=>where)代码>如果您已经这样做了,那么您可以调用实例化\u Name.Print\u List
或实例化了泛型包后,您可以使用实例化\u名称代码>和程序将可见。如果为不同的类型实例化两次,其中大多数将显示,并按其参数类型正确解析,但无参数printlist
不会显示。这很好:它让你使用实例化\u Name.printlist
来打印正确的列表。实例化得到了它。多谢各位much@JesseSchultz:请回答您的问题以显示您修改的方法,或者您可以。
generic
max: integer;
type itemType is private;
package CreateList is
procedure add_to_list (listItem: in itemType);
--
procedure delete_from_list (indx: in itemType);
--
function length_of_list return itemType;
--
procedure print_list (indx: in itemType);
procedure print_list;
end CreateList;