그것은 에이다 강력한 타이핑 때문이다 있습니다. Ada를 사용하면 서로 호환되지 않는 새로운 정수 및 부동 소수점 유형을 선언 할 수 있습니다. 원래의 의도는 실수로 값이 의미와 완전히 다른 의미를 갖는 것처럼 사용하는 것을 방지하기위한 것이 었습니다.
컴파일러는 "대량"변수가 길이를 가질 수 없기 때문에이 문장을 포착합니다. 모든 것이 단지 Float
또는 Long_Float
이라면 컴파일러는 그것을 잡을 수 없을 것입니다.
다른 정수 유형 인 int
을 작성하면됩니다. 위의 예에서와 같이 새 유형의 값은 String
의 색인 유형인 Integer
으로 자동 변환 될 수 없습니다. (String
실제로 array (Positive range <>) of Character with Pack;
로 정의되어 있지만, Positive
이 하위 Integer
의이며, 그들은 같은 기본 유형의 하위 유형이 정말로 때문에 값이 자동으로 Positive
및 Integer
사이에 변환 할 수 있습니다.)
불행하게도,이 아니다 이 문맥에서 판별자가 혼자 나타나야한다는 Ada 규칙 때문에 허용됨 :
type my(var : int) is record
name : string (1 .. Integer(var)); -- this var here is bad why?
end record;
따라서 유일한 옵션은 int
을 하위 유형으로 지정하는 것입니다.
subtype int is Integer range 0 .. 10;
type my(var : int) is record
name : string (1 .. var); -- this var here is bad why?
end record;
출처
2014-12-03 16:03:46
ajb
'Ada.Strings.Bounded'를 사용하지 않는 이유는 무엇입니까? – trashgod
Gnat를 사용하는 경우 오류 메시지가 무엇이 잘못되었는지를 알려줍니다. 'int'를 새로운 타입 대신에'Integer'의 subtype으로 만들었다면 다른 에러들을 발견 할 수 있습니다. –