2010-12-16 3 views
2

필자의 import 문 바로 뒤에서 시작하는 "compilation unit expected"를 제외한 모든 다른 컴파일 타임 오류를 제거했습니다. 내가 꾸러미를 만들어야 겠어? 그렇다면 어떻게해야합니까? 몇 가지 기능이 모두 동일한 .ADB 파일에 있습니다.Ada, 내 패키지를 확인하십시오. ("compilation unit expected"?)

편집 :

a_.adb:27:18: loop or block statement must follow label 
a_.adb:27:18: reserved word "array" cannot be used as identifier 
a_.adb:28:01: declarations must come before "begin" 

막시무스 graCimuS

: 그것은 myPackage에를 볼 때

-- Import Statements 
with Ada.Text_Io; 
use Ada.Text_Io; 

package body MyPackage is 

-- Declarations 
-- Functions 

end MyPackage; 

그러나 GCC 비명 소리 : 그래서 그것을 ...

체크 아웃 내 패키지를 발사했다

+0

패키지와 함께 코드를 래핑하기 전에 이러한 컴파일러 오류가 없었습니다. –

+1

해당 컴파일러 메시지는 게시 한 코드에 속할 수 없습니다 (28 행이 없기 때문에). 그리고 GCC는이 코드가'mypackage.adb' 파일에있을 것으로 기대합니다; 'mypackage.ads'에 패키지 스펙이 필요합니다. –

+0

사실, 나는 그것을 벗겼다. 그리고 .ads 패키지 스펙 제안에 감사드립니다. 그럴 수 있습니다 트릭, 그래서이 의견을 홍보하는 것이 좋습니다. –

답변

2

해당 컴파일러 메시지는 게시 한 코드에 속할 수 없습니다 (28 행이 없기 때문에).

어쨌든 GCC는이 코드가 파일 mypackage.adb에있을 것으로 기대합니다. mypackage.ads에 패키지 사양이 있어야합니다.

+0

이것은주의해야 할 중요한 사실입니다. gcc의 Ada 구현은 파일 내용의 식별자 이름과 일치하도록 파일 이름을 강요하는 다소 일반적인 단계를 취합니다. 특히, 파일에'fnord'라는 패키지 본문이나 서브 루틴이 들어 있다면 파일 **은 반드시 (기본적으로 어쨌든)'fnord.adb'라는 이름이어야합니다. 'fnord'라는 이름의 pacakge 스펙이 포함되어 있다면, ** 반드시 ** fnord.ads라고 이름 지어 져야합니다. 이것은 gcc의 gnat Ada 구현의 단점입니다. Ada 컴파일러는 일반적으로 아닙니다. –

4

패키지 본문은 패키지 사양을 구현 한 것입니다.

위법은 아니지만 기본적인 Ada 프로그래밍 개념을 숙지해야합니다.

어쩌면 Lovelace Tutorial으로 시작 하겠지만, 그것은 옛날 일이지만 좋은 일입니다.