#.net #arrays #methods #parameters #delphi-prism
#.net #массивы #методы #параметры #delphi-prism
Вопрос:
У меня есть метод с именем Rotate, и я вызываю его из другого метода следующим образом:
Метод поворота, как определено:
method TMakerGraphic.Rotate(var pts:array of Point; pcnt,xc,yc:integer);
Вызываем его из другого метода следующим образом:
method TMakerLine.GetDynamicBounds(var r:Rectangle);
var
pts:array[1..2] of Point;
midx,midy:integer;
begin
with bounds do
begin
pts[1].x := left;
pts[1].y := top;
pts[2].x := right;
pts[2].y := bottom;
if Active then
begin
r := bounds;
with r do
begin
midx := ((right - left) div 2) left;
midy := ((bottom - top) div 2) top;
end;
Rotate(var pts,2,midx,midy); <<<<============= Here is where it raises the error
end;
end;
end;
Возникает ошибка «Нет перегруженного метода «Rotate» с этими параметрами». Я проверил, чтобы убедиться, что параметры и вызовы метода были правильными, и я думаю, что так оно и есть, но это вызывает эту ошибку. Я не понимаю, почему.
Заранее спасибо,
Ответ №1:
Эта ошибка вызвана тем, что array of Point
тип является несвязанным массивом, а array[1..2] of Point
это связанный массив, поэтому вы передаете разные типы, чтобы устранить проблему, объявите pts
переменную как array of Point
, а затем с помощью New
вы можете установить размер массива.
Проверьте этот пример
var
pts:array of Point;
midx,midy:integer;
begin
with bounds do
begin
pts:= New Point[2];
pts[0].x := left;
pts[0].y := top;
pts[1].x := right;
pts[1].y := bottom;
Комментарии:
1. @ RRUZ, Фантастика. Отлично работает. Спасибо, но у меня действительно есть небольшой вопрос. Создавая новые точки внутри методов, которые будут вызываться довольно часто, например, 100 раз в секунду, возможно, вы собираетесь исчерпать память или утечка. Я понимаю, что это локальная переменная и, следовательно, уничтожается каждый раз, когда программа покидает метод.
2. Сборщик мусора из . Net обработает освобождение памяти за вас, так что не беспокойтесь об этом