2016-12-18 1 views
2

그래서 정렬 알고리즘을 사용하는 학교용 일반 프로그램에서 작업했습니다. 선생님은 모든 것을 다른 단위에 넣는 것을 항상 좋아해서 정렬 된 배열의 출력을 제공하는 "출력"절차를 만들기로 결정했습니다. 치명적인 : 나는 오류 얻을 수있는 곳입니다 (프로 시저 ausgabe를 호출 할 때)Lazarus : 다른 프로 시저에서 "출력"프로 시저를 열 때 치명적인 오류가 발생했습니다.

unit selectionsort; 

{$mode objfpc}{$H+} 

interface 

uses 
    Classes, SysUtils, typen, ausgabe; 
procedure SSort (FeldS: t_Feld); 

implementation 
procedure SSort (FeldS: t_Feld); 
var h,j,min,hilf: integer; 
begin 
    for h:= 1 to c-1 do 
     begin 
     ## all the sorting stuff 
     end; 
    **ausgabe(FeldS);** 
end; 
end. 

unit ausgabe; 

{$mode objfpc}{$H+} 

interface 

uses 
    Classes, SysUtils, typen; 
procedure ausgabe(FeldA: t_feld); 

implementation 
procedure ausgabe(FeldA: t_feld); 
begin 
    for i:= 1 to c do 
     begin 
     write(FeldA[i], ' '); 
     end; 

    readln(); 
end; 

end. 

굵은 부분 (ausgabe 출력을위한 독일어) ".", 구문 오류를 예상했지만 "("발견되었습니다. "Ausgabe"프로 시저를 삭제하고 정렬 절차에서 출력을 수행 할 수 있지만이 방법으로 처리하려고합니다.

답변

2

절차는 ausgabe이며 단위는 동일합니다. 이름 (이것은 서로 다른 범위에서 가능하기 때문에), 컴파일러는 이른바 "수식 된 식별자"라고 가정합니다 : unitname.procedurename 이것은 여러 유닛의 식별자가 같은 경우 필요합니다. 오류를 극복하려면 유닛의 이름을 바꾸거나 또는 프로 시저 또는 정규화 된 이름을 사용하여 프로 시저를 호출 할 때 (첫 번째 ausgabe은 컴파일러에서 심볼을 검색해야하는 단위의 이름입니다.

ausgabe.ausgabe(FeldS);

+0

감사합니다. 많은 도움이되었습니다. –

관련 문제