![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объясните как написать функцию с возвратом ? [D7]
XTD © (2006-06-02 15:23:00)Передаю из процедуры в функцию параметры, в функции должно посчитать и вернуть результат в туже процедуру.
function mmy(var s:string):string;
begin
Result := s+" 1";
end;
procedure my;
begin
ShowMessege(mmy('1'));
end;
Должно вывести 1+1 а ругается.
Loginov Dmitry (2006-06-02 18:59:00) [1]evvcom © (02.06.06 16:34) [20]
а без const компилятор сгенерит не нужный для данного случая код, копирующий переданную строку в стек. А это как минимум неоптимально.
1) Строки String к стеку никакого отношения не имеют.
2) Никакого копирования строки не произойдет, так как в самой функции она не модифицируется.
Asail (2006-06-02 17:13:00) [2]Согласен
evvcom (2006-06-02 16:34:00) [3]
> Просто поменяй function mmy(var s:string):string;
> на function mmy(s:string):string;
уже раньше указали на что поменять, т.е. на
function mmy( consts:string):string;
а без const компилятор сгенерит не нужный для данного случая код, копирующий переданную строку в стек. А это как минимум неоптимально.
Asail (2006-06-02 15:52:00) [4]Описать TForm1.FaileNameTime в разделе implementation
XTD (2006-06-02 15:45:00) [5]DiamondShark , так что делать ?
Kolan (2006-06-02 15:39:00) [6]
> 'TForm1.FaileNameTime'
А еще один способ лесенияч стать на клсс и нажатьCtrl+Shift+C:)
DiamondShark (2006-06-02 15:37:00) [7]Можно.
TForm1.FaileNameTime описана в заголовке, но отсутствует в реализации.
Но это не имеет ни малейшего отношения к исходному вопросу.
Сергей М. (2006-06-02 15:37:00) [8]
> XTD © (02.06.06 15:34) [13]
А перевести и осознать не пробовал ?
Kolan (2006-06-02 15:36:00) [9]
>
> function AddStrings(S: string): string;
> begin
> Result := S + '1';
> end;
>
> procedure ShowString;
> begin
> ShowMessage(AddStrings('1+'));
> end;
>
Вот так работает ? :)
XTD (2006-06-02 15:34:00) [10]А тут можно ответить ?
DiamondShark (2006-06-02 15:32:00) [11]
> Теперь так: Unsatisfied forward or external declaration:
> 'TForm1.FaileNameTime'
Это в другую ветку.
XTD (2006-06-02 15:31:00) [12]в type
Asail (2006-06-02 15:31:00) [13]Просто поменяй function mmy(var s:string):string;
на function mmy(s:string):string;
XTD (2006-06-02 15:30:00) [14]Теперь так: Unsatisfied forward or external declaration: 'TForm1.FaileNameTime'
Kolan (2006-06-02 15:30:00) [15]
> function mmy( vars:string):string;
var ненужно т.к. ты не изменяешь передаваемую строку...
Kolan (2006-06-02 15:29:00) [16]
> Должно вывести 1+1 а ругается.
Твое выведет '11'
function TForm1.AddStrings(S: string): string;
begin
Result := S + '1';
end;
procedure TForm1.ShowString;
begin
ShowMessage(AddStrings('1+'));
end;
XTD (2006-06-02 15:28:00) [17]Constant object cannot be passed as var parameter
Dmitrij_K (2006-06-02 15:28:00) [18]function mmy(const s:string):string;
begin
Result := s+'+1';
end;
procedure my;
begin
ShowMessege(mmy('1'));
end;
Dmitrij_K (2006-06-02 15:27:00) [19]function mmy( consts:string):string;
Kolan (2006-06-02 15:27:00) [20]
> Result := s+" 1";
Result := s+' 1';