Столкнулся с проблемой. При использовании переменной процедурного типа для функции без параметров, компилятор не позволяет производить присвоение такой переменной локально переменной соответствующего типа. А с параметром пропускает. Знает ли кто эту проблему?
Код, генерящий ошибку:
- Код: Выделить всё
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.