Столкнулся с проблемой. При использовании переменной процедурного типа для функции без параметров, компилятор не позволяет производить присвоение такой переменной локально переменной соответствующего типа. А с параметром пропускает. Знает ли кто эту проблему?
Код, генерящий ошибку:
- Код: Выделить всё
- program project1;
 {$mode objfpc}{$H+}
 type
 TestFuncType = function : byte;
 var
 TestFunc : TestFuncType = nil;
 B: byte;
 function Test: byte;
 begin
 result:=1
 end;
 begin
 TestFunc:=@test;
 B:=TestFunc; // <-- project1.pas(18,6) Error: Incompatible types: got "<procedure variable type of function:Byte;Register>" expected "Byte"
 end.
А такой код работает:
- Код: Выделить всё
- program project1;
 {$mode objfpc}{$H+}
 type
 TestFuncType = function (q: boolean): byte;
 var
 TestFunc : TestFuncType = nil;
 B: byte;
 function Test (q: boolean) : byte;
 begin
 if q then result:=1
 else result:=0;
 end;
 begin
 TestFunc:=@test;
 B:=TestFunc(true);
 end.


