Вниз
Скачать: CL | DM;

Объясните как написать функцию с возвратом ?   Найти похожие ветки 

← →
XTD ©   (2006-06-02 15:23) [0]

Передаю из процедуры в функцию параметры, в функции должно посчитать и вернуть результат в туже процедуру.

function mmy(var s:string):string;
begin
Result := s+" 1";
end;

procedure my;
begin
ShowMessege(mmy("1"));
end;

Должно вывести 1+1 а ругается.


← →
XTD ©   (2006-06-02 15:25) [1]

Что нетак ?


← →
DiamondShark ©   (2006-06-02 15:26) [2]

а как ругается?


← →
Kolan ©   (2006-06-02 15:27) [3]


> Result := s+" 1";

Result := s+" 1";


← →
Dmitrij_K   (2006-06-02 15:27) [4]

function mmy(const s:string):string;


← →
Dmitrij_K   (2006-06-02 15:28) [5]

function mmy(const s:string):string;
begin
Result := s+"+1";
end;

procedure my;
begin
ShowMessege(mmy("1"));
end;


← →
XTD ©   (2006-06-02 15:28) [6]

Constant object cannot be passed as var parameter


← →
Kolan ©   (2006-06-02 15:29) [7]


> Должно вывести 1+1 а ругается.

Твое выведет "11"

function TForm1.AddStrings(S: string): string;
begin
 Result := S + "1";
end;

procedure TForm1.ShowString;
begin
 ShowMessage(AddStrings("1+"));
end;


← →
Kolan ©   (2006-06-02 15:30) [8]


> function mmy(var s:string):string;

var ненужно т.к. ты не изменяешь передаваемую строку...


← →
XTD ©   (2006-06-02 15:30) [9]

Теперь так: Unsatisfied forward or external declaration: "TForm1.FaileNameTime"


← →
Asail   (2006-06-02 15:31) [10]

Просто поменяй function mmy(var s:string):string;
на function mmy(s:string):string;


← →
XTD ©   (2006-06-02 15:31) [11]

в type


← →
DiamondShark ©   (2006-06-02 15:32) [12]


> Теперь так: Unsatisfied forward or external declaration:
>  "TForm1.FaileNameTime"

Это в другую ветку.


← →
XTD ©   (2006-06-02 15:34) [13]

А тут можно ответить ?


← →
Kolan ©   (2006-06-02 15:36) [14]


>
> function AddStrings(S: string): string;
> begin
>  Result := S + "1";
> end;
>
> procedure ShowString;
> begin
>  ShowMessage(AddStrings("1+"));
> end;
>

Вот так работает ? :)


← →
Сергей М. ©   (2006-06-02 15:37) [15]


> XTD ©   (02.06.06 15:34) [13]


А перевести и осознать не пробовал ?


← →
DiamondShark ©   (2006-06-02 15:37) [16]

Можно.
TForm1.FaileNameTime описана в заголовке, но отсутствует в реализации.
Но это не имеет ни малейшего отношения к исходному вопросу.


← →
Kolan ©   (2006-06-02 15:39) [17]


> "TForm1.FaileNameTime"

А еще один способ лесенияч стать на клсс и нажать Ctrl+Shift+C :)


← →
XTD ©   (2006-06-02 15:45) [18]

DiamondShark , так что делать ?


← →
Asail   (2006-06-02 15:52) [19]

Описать TForm1.FaileNameTime в разделе implementation


← →
evvcom ©   (2006-06-02 16:34) [20]


> Просто поменяй function mmy(var s:string):string;
> на function mmy(s:string):string;

уже раньше указали на что поменять, т.е. на
function mmy(const s:string):string;
а без const компилятор сгенерит не нужный для данного случая код, копирующий переданную строку в стек. А это как минимум неоптимально.


← →
Asail   (2006-06-02 17:13) [21]

Согласен


← →
Loginov Dmitry ©   (2006-06-02 18:59) [22]

evvcom ©   (02.06.06 16:34) [20]
а без const компилятор сгенерит не нужный для данного случая код, копирующий переданную строку в стек. А это как минимум неоптимально.


1) Строки String к стеку никакого отношения не имеют.
2) Никакого копирования строки не произойдет, так как в самой функции она не модифицируется.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.033 c
2-1148882517
Belorus
2006-05-29 10:01
2006.06.18
DLL


15-1148388558
AlexanderMS
2006-05-23 16:49
2006.06.18
Сжатие программы


1-1147514243
Arny
2006-05-13 13:57
2006.06.18
"Глюк" отображения текста в поле Memo


2-1148942125
alec_sey
2006-05-30 02:35
2006.06.18
Массивы


15-1147987692
TDelphiWebScript
2006-05-19 01:28
2006.06.18
[DelphiWebScript] Как изменять размер динамических массивов ?




   Наверх