gpt4 book ai didi

generics - 如何使用用户输入变量作为通用包的参数?

转载 作者:行者123 更新时间:2023-12-04 17:44:45 25 4
gpt4 key购买 nike

Stack.adb我指定了两个参数(大小和类型)。我想创建一个堆栈,该堆栈具有用户在我的 multistack.adb 中指定的确切数据类型。文件。

我似乎无法找到一种方法来创建新包或使用用户定义的堆栈类型变量实例化堆栈。在我继续之前,代码如下(为了避免代码墙,我删除了一些不相关的行):
Stack.adb :

GENERIC
SIZE : Integer; --size of stack
TYPE Item IS PRIVATE; --type of stack
multistack.adb :
WITH Ada.Text_Io; USE Ada.Text_Io;
WITH Stack;
PROCEDURE multistack IS
PACKAGE Iio IS NEW Ada.Text_Io.Integer_Io(Integer); USE Iio;
Type StackType IS (Int, Str, Char, Day);

package stack_io is new Ada.Text_IO.Enumeration_IO(StackType); use stack_io;

package get_user_specs is
function makestack return StackType;
end get_user_specs;

package body get_user_specs is
function makestack return StackType is
s_type : StackType;
begin
put("What is the stack type?"); new_line;
get(s_type);
return s_type;
end makestack;
begin
null;
end get_user_specs;

user_stack_type : StackType := get_user_specs.makestack;

PACKAGE User_Stack IS NEW Stack(100, user_stack_type); use User_Stack;

BEGIN
null;
END Multistack;

因此,正如您从代码中可以看出的,我为堆栈类型创建了数据类型。我还创建了一个 Enumeration_IO包以获取用户输入。我遇到的具体问题是:
   PACKAGE User_Stack IS NEW Stack(100, user_stack_type); use User_Stack;

它提示我试图使用 user_stack_type作为类型。具体错误是 expect valid subtype mark to instantiate "Item" ,然后说 User_Stack 未定义。

我做了一个 put(user_stack_type)只是为了测试,我可以确认它确实获得了用户指定的数据类型。那么为什么不允许我创建这个包 User_Stack 呢?

最佳答案

在您的片段中,user_stack_typeobject declaration ,但是一个 generic instantiation需要 subtype mark .获得所需效果的一种方法是在已知所选子类型后在嵌套范围内实例化泛型:

if User_Stack_Type = Int then 
declare
package User_Stack is new Stack(100, Integer);
begin
Put_Line(Stack_Type'Image(User_Stack_Type));

end;
end if;

关于generics - 如何使用用户输入变量作为通用包的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39175678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com