2016-12-18 2 views
2

Так что я просто работал над общей программой для школы, которая использует алгоритмы сортировки. Учитель всегда любит помещать все в разные единицы, поэтому я решил создать «выходную» процедуру, которая дает результат сортированного массива.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. 

(Ausgabe является немецкий для вывода)

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), где я получаю ошибку: Fatal: Синтаксическая ошибка "" («найдено». «Я знаю, что могу просто удалить процедуру« Ausgabe »и сделать вывод в процедурах сортировки, но я хотел бы сделать это таким образом.

ответ

2

Как и процедура ausgabe, и устройство имеет одинаковые (это возможно, поскольку они находятся в разных областях), компилятор принимает так называемый «квалифицированный идентификатор»: unitname.procedurename.Это необходимо, если несколько устройств имеют идентификаторы с тем же именем. Чтобы преодолеть ошибку: либо вы переименуете блок или порядок или вызвать процедуру, используя его квалифицированное имя (первый ausgabe этого имя устройства, в котором компилятор должен искать символ, то второй ausgabe является фактическим именем процедуры):

ausgabe.ausgabe(FeldS);

+0

Thank! Помогли много. –

Смежные вопросы