Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
ВнизПеременная-функция Найти похожие ветки
← →
Myrs (2003-12-02 17:28) [0]Может кто-нибудь сможет помочь, буду очень благодарен.
Объявляю функцию
function TfmDur.doh1(x: real): real;
var i: integer; sum: real;
begin
sum:=0;
for i:=1 to length(time) do sum:=sum+cupon[i-1]/Power(1+x/mpr, time[i-1]*mpr);
Result:=pr-sum;
end;
и переменную
var Func: function(X: real): real;
Когда я пытаюсь сделать
Func:=doh1;
компилятор выдает
Incompatible types: "regular procedure and method pointer".
Что я делаю неправильно?
← →
BlackKing (2003-12-02 17:30) [1]a tak ne projdjot?
Func:=fmDur.doh1;
← →
_юзер_ (2003-12-02 17:33) [2]не пройдёт, так ка doh1 - это метод. а в него ещё неявно передаётся указатель на экземпляр класса
← →
Юрий Федоров (2003-12-02 17:33) [3]var Func: function(X: real): real; of object;
← →
Myrs (2003-12-02 17:49) [4]2Юрий Федоров
А что обозначает "of object"?
Так или иначе, все заработало, огромное спасибо!
← →
Юрий Федоров (2003-12-02 17:58) [5]
> А что обозначает "of object"?
Это значит метод, а не просто функция \ процедура
← →
Тимохов (2003-12-02 18:00) [6]2Автор
На самом деле приписка of object значит, что переменная (в твоем случае func) будет представлять собой два указателя - один на объект, другой на метод. Если of object не писать, то func это просто один указатель.
← →
BlackKing (2003-12-02 18:12) [7]A v Delphi 3 takoje ne prokatit?
u menja rugajetsja. :o(
← →
Тимохов (2003-12-02 18:15) [8]ТоBlackKing
интересно а как же тогда в дельфе события реализованы если на "of object" ругается?
← →
BlackKing (2003-12-02 18:18) [9]no ja popitalsja tozhe samoje u sebja sotvorit" - rugajetsja
Declaration expected but "OF" found.
← →
Тимохов (2003-12-02 18:20) [10]глянь как события реализованы в любом файле с расширением из директории source\vcl.
← →
_юзер_ (2003-12-02 18:20) [11]2BlackKing:
убери точку с запятой перед of object
← →
BlackKing (2003-12-02 18:26) [12]ponjal...
A vot takoj vopros voznik:
jest" komponenti. u nekotorih iz nih jest" funkcii i proceduri, s odinakovim imenem. Mozhno li kak-to opredelit", jest" li u komponenta iskomaja procedura ili funkcija i zapustit" jejo?
← →
BlackKing (2003-12-02 18:29) [13]Proboval takoj variant :
procedure TForm1.Button4Click(Sender: TObject);
var
P:Pointer;
S:Procedure(Add:Boolean; S1,S2:String; Var OutS1:String; Var OutS2:String);
S11,S12:String;
begin
S11:="";
S12:="";
P:=ADComboBox1.MethodAddress("GetData");
If P<>Nil then
Begin
showmessage("yes");
S:=P;
S(False,S11,S12,S11,S12);
End;
ShowMessage("S11: "+S11);
ShowMessage("S12: "+S12);
end;
tak vot jesli v procedure zatragivajetsja hot" odna peremennaja ili svojstvo samogo komponenta - vidajotsja oshibka Access violation...
← →
_юзер_ (2003-12-02 18:31) [14]S:Procedure(Add:Boolean; S1,S2:String; Var OutS1:String; Var OutS2:String) of object;
← →
BlackKing (2003-12-02 18:33) [15]togda takoje ne propustit
S:=P;
← →
Тимохов (2003-12-02 18:37) [16]2blackking
type
TFunc = procedure(a: string) of object;
TObj = class
procedure func(a: string);
end;
procedure TObj.func(a: string);
begin
showmessage(a);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
kFunc: TFunc;
begin
tmethod(kFunc).Code := @TObj.func;
tmethod(kFunc).data := tobj.create();
kFunc("Hello word");
end;
-- без комментариев - просто интересный пример использования записи tmethod. Поясняет как устроены процедурные переменные ссылающиеся на методы объектов.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c