Нет перегруженного метода «Rotate» с этими параметрами (массив точек)

#.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 обработает освобождение памяти за вас, так что не беспокойтесь об этом