2013-10-04 4 views
1

У меня есть следующие функции, которые, как предполагается разбить строку на массив строк (я использую Geany IDE и FPC компилятор):идентификатор типа ожидается ошибка FPC компилятор

function Split(const str: string; const separator: string): array of string; 
var 
i, n: integer; 
strline, strfield: string; 
    begin 
n:= Occurs(str, separator); 
SetLength(Result, n + 1); 
i := 0; 
strline:= str; 
repeat 
if Pos(separator, strline) > 0 then 
begin 
    strfield:= Copy(strline, 1, Pos(separator, strline) - 1); 
    strline:= Copy(strline, Pos(separator, strline) + 1, 
Length(strline) - pos(separator,strline)); 
end 
else 
begin 
    strfield:= strline; 
    strline:= ''; 
end; 
Result[i]:= strfield; 
Inc(i); 
until strline= ''; 
if Result[High(Result)] = '' then SetLength(Result, Length(Result) -1); 
end; 

компилятор выдает сообщение об ошибке:

calc.pas(24,61) Error: Type identifier expected 
calc.pas(24,61) Fatal: Syntax error, ";" expected but "ARRAY" found 

Насколько я понимаю, синтаксис верен, в чем проблема?

+1

Компилятор сообщает вам, что вы не можете вернуть нетипизированный динамический массив. Объявить f.i. 'type TStringArray = массив строки;' и вы можете вернуть 'TStringArray' из функции. –

+0

ah thx, опубликуйте это как ответ, и я приму это. Паскаль кажется довольно странным после лет java>< – Droidman

+0

Готово, и вы можете. Но, пожалуйста, просмотрите свой вопрос в течение некоторого времени, так как я действительно не знаю, зависит ли это поведение от определенного «режима». Если это так, кто-то может предоставить расширенный ответ. –

ответ

3

Компилятор сообщает вам, что вы не можете вернуть нетипизированный динамический массив. Вы можете объявить f.i.

type TStringArray = array of string; 

и вы можете вернуть TStringArray из функции. Обратите внимание, что переменная, объявленная как TStringArray, не будет совместима с аналогично объявленным, но по-разному типизированным массивом, например, с type TOtherStringArray = array of string.