2011-02-04 5 views
3

패키지 공개 여부에 문제가 있습니다. 나는 정말 간단한 패키지를 가지고 있고 코드는 아래에 나열되어있다. 오류 메시지가 여기에 표시됩니다 다음과 같이패키지가 보이지 않는 오류

package Viterbi is 

    procedure Load_N_File(
    Filename : in String; 
    N : in out Integer; 
    M : in out Integer); 

end Viterbi; 

패키지 본문은 다음과 같습니다 : 다음과 같이

viterbi.adb:12:14: "Integer_Text_IO" is not visible (more references follow) 
viterbi.adb:12:14: non-visible declaration at a-inteio.ads:18 
gnatmake: "viterbi.adb" compilation error 

패키지 사양이

의 원인이되는 내 패키지 몸에 어떤
with Ada.Integer_Text_IO; use with Ada.Integer_Text_IO; 
with Ada.Strings; use Ada.Strings; 

package body Viterbi is 

    procedure Load_N_File(
    Filename : in String; 
    N : in out Integer; 
    M : in out Integer 
) is 
    N_File : File_Type; 
    begin 
    Open(N_File, Mode=>In_File, Name=>Filename); 
    Get(N_File, N); 
    Get(N_File, M); 
    Close(N_File); 
    end Load_N_File; 

end Viterbi; 

숨겨진 패키지? use 절이 Integer_Text_IO를보기에 가져 오지 않아야합니까?

+0

많은 사람들이 저와 동의하지 않지만, 일반적으로 사람들은'use' 절없이 먼저 코드를 작성하도록 조언합니다. 완료되면 정리 단계로 넘어 가서 코드가 명확 해지면 다시 넣을 수 있습니다. 그 (것)들에 대한 문제는 당신이 당신이 당신의 머리카락을 꺼내고있는 위의 문제를 얻는 지점까지 게으르도록 허용한다는 것입니다. 왜냐하면 당신은 물건들이 실제로는 들어 있지 않은 패키지에 있다고 생각하기 때문입니다. –

+0

사실은 매우 합리적으로 보입니다. C++을 작성할 때 맨 위에있는 모듈을 제외하고 항상 전체 범위 지정 (예 : boost :: smarter_ptr, std :: string)을 사용합니다. 나는 Ada에서 그러한 정책을 채택하는 것이 이치에 맞다고 생각합니다. –

+0

어떤 컴파일러를 사용하고 있습니까? 나는 "viterbi.adb : 1 : 31 : reserved word"를 "식별자로 사용할 수 없다"고합니다! –

답변

4

제공된 본문 코드의 코드에 구문 오류가 있습니다. "을 사용하십시오 ( Ada.Integer_Text_IO;와 (과) 사용)"의 가짜 "with". 절.

내가 다음 FILE_TYPE, 열기닫기를 해결하기 위해 무능력 주위를 맴도는 컴파일 오류를 얻을 수 있다는 고정 가졌어요. Ada.Text_IO의 "with"와 "use"를 추가하면 깨끗한 컴파일이 가능합니다.

with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; 
with Ada.Strings; use Ada.Strings; 
with Ada.Text_IO; use Ada.Text_IO; 

package body Viterbi is 
    ... 

여전히 이러한 오류를 수정 한 후 "Integer_Text_IO를 찾을 수 없습니다"오류가 발생하는 경우, 그때 내가 개발에 대한 의심스러운 것 :

그래서 패키지 본체의 시작은 같다 환경, 즉 모든 것이 올바르게 설치 되었습니까?

+0

감사합니다. 나는 "with"라는 여분의 것을 놓쳤다 고 믿을 수 없습니다. 이를 제거해도 오류가 사라지는 것은 아니지만 Ada.Text_IO 패키지를 추가하여보기에 가져 오면 오류가 해결되었습니다. 다시 한번 감사드립니다. –

2
당신은 피할 수

이미 쉼표로 분리 된 스타일을 사용하여, 지적, 오류의 스타일 "로 사용" 포함 - 테스트, Ada.Integer_Text_IO, Ada.Strings;

Use 
-- Testing, 
Ada.Strings, 
Ada.Integer_Text_IO; 

이도 같이 특정 패키지 '널빤지'또는 'usues'을 주석 처리 할 수 ​​있습니다.

+0

니스, 패키지 이름을 쉼표로 구분할 수 있는지 몰랐습니다. 나는 요즘의 언어 사양을 읽으려고 할 필요가있다. –

관련 문제