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
패키지를 만들었습니다. 내가 함께 특정 문제가있어 라인이다 : 그것은 내가 유형으로 user_stack_type
을 사용하려고 시도하고있어 사실에 대해 불평
PACKAGE User_Stack IS NEW Stack(100, user_stack_type); use User_Stack;
. 특정 오류 expect valid subtype mark to instantiate "Item"
, 다음 User_Stack 정의되지 않았습니다.
테스트하기 위해 put(user_stack_type)
을 수행했는데 사용자가 지정한 데이터 유형을 얻었 음을 확인할 수 있습니다. 그렇다면이 패키지 User_Stack을 만들 수없는 이유는 무엇입니까?
도 참조 [* 런타임 *에서 에이다의 제네릭 (http://stackoverflow.com/ q/9630086/230513). – trashgod