Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проблема с описанием процедуры.


Автор: Pakshin A. S. 31.10.2003, 21:23
Пишу следующее:
Код

procedure ProcName(const Per1:string[; Per2:integer]);
begin

end;


А компилятор ругается:
Цитата

';',')' or '=' expected but '[' found
')' expected but ']' found


Хотя эта штука должна теоритически работать!

В чём проблема: во мне, или в Delphi , или ещё в чём-то?

Автор: <Spawn> 31.10.2003, 21:40
Помоему, в парамерах процедуры нельзя задавать размер стринга, хотя я могу ошибаться.

Автор: bagira 31.10.2003, 21:41
Конструкция после слова String явно какая-то неправильная:
1. Если просто String - тогда после этого слова должна быть точка с запятой.
2. Если String с указанием длины - тогда должны быть квадратные скобки и в них переменная или число, тогда здесь не должно быть точки с запятой после квадратной скобки.
3. Можно константу задать напрямую - через знак равенства.
Мне так кажется. Проверь это подозрительное место.

Автор: Pakshin A. S. 31.10.2003, 21:46
Ради прикола написал переписал процедуру inc, взяв её описание из Helpa:
Код

procedure Inc(var X [; N: Longint ] );

Ругается безбожно!!!!!!!!!!!!!!!!!!!!!

Автор: Pakshin A. S. 31.10.2003, 21:48
Чёрт (извините) кнопка Delete отказалась работать!!!!!

Автор: Vit 31.10.2003, 22:11
Inc - объявляется следующим образом:

Inc(var X:integer; N: Longint=1);

Автор: Pakshin A. S. 31.10.2003, 22:15
WOW! А чё в Helpe написали?! Ложь?! И не только в Delphi но и в Pascal?!

А не курсах говорилось, что так можно описывать процедуру. Так что, и там всё врут?!

Автор: bagira 31.10.2003, 22:36
Я кажется поняла! Так в некоторых хелпах показывают необязательный параметр - в квадратных скобках - это неудачно придумали. Как раз для команды Inc второй параметр является необязательным - он по умолчанию - единица.

Автор: Vit 31.10.2003, 23:17
Всё удачно, просто кто-то лекции невнимательно слушает smile.gif ;) - шутю я, не обижайтесь...

Есть такое понятие - метаязык - это язык описания конструкций языка. В большинстве метаязыков принято необязательные параметры указывать в квадратных скобках, в реальном же языке применяются специальные конструкции. Начиная с Дельфи 4 появились 2 оччччччень полезные конструкции:

Значение по умолчанию:

Код
Procedure MyProc(Str:string='Privet!');
begin
 Showmessage(Str);
end;


Такая процедура вызванная:

MyProc('Hello!');//На экран выведется окно с заголовком "'Hello!"
MyProc;//На экран выведется окно с заголовком "'Privet!"


И другая фича - перезагружаемые процедуры:

Код
Procedure MyProc(s:string);overload;
Procedure MyProc(i:integer);overload;

...
Implementation

Procedure MyProc(s:string);overload;
begin
 showmessage(s);
end;

Procedure MyProc(i:integer);overload;
begin
 showmessage(inttostr(i));
end;


Такую процедуру можно вызвать и как MyProc('Privet!') и как MyProc(1000)


Автор: neutrino 31.10.2003, 23:22
А до этого разве не было перегрузки функций?

Автор: Vit 31.10.2003, 23:32
Цитата(neutrino @ 31.10.2003, 14:22)
А до этого разве не было перегрузки функций?

Было но не в Дельфи и не в Паскале - эта фича пришла из C++

Автор: Pakshin A. S. 1.11.2003, 21:14
Ну так что? Ента штука с квадратными скобками не пройдёт?

Автор: December 2.11.2003, 02:11
Pakshin A. S. Нет, конечно.

Автор: neutrino 2.11.2003, 15:21
Мда... Я когда писал в Дельфи 3, то не использовал перегрузку. Потом в 4 начал и все время думал, что она всегда была. Соответственно когда начал учить С++ - само собой подразумевал, что эта фича всегда была во всех языках. Интересно знать...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)