2011-11-10 2 views
0

이러한 매개 변수 (점의 배열)와 더 오버로드 방법 "회전"입니다 다음과 같이 나는 다른 방법에서 호출 오전 : 정의가 나는 방법은 회전 불렀다

회전 방법 :

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; 

그것은 오류를 제기 매개 변수와 메서드 호출이 올바른지 확인하고 오류가 있다고 생각하지만이 오류가 발생합니다. 나는 왜 그런지 이해하지 못한다. 사전에

감사합니다,

답변

1

array of Point 유형이 언 바운드 배열하고 array[1..2] of Point하면, 다른 유형을 전달하는 문제가 array of Pointpts 변수를 선언 수정하고, 그래서 바운드 배열 때문에이 오류가있다 New을 사용하여 배열의 크기를 설정할 수 있습니다.

확인 환상적인이 샘플 RRUZ @

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; 
+0

. 훌륭하게 작동합니다. 고마워요.하지만 빠른 질문이 있습니다. 100 번이나 2 번과 같이 꽤 자주 호출 될 메소드 내에서 새로운 점을 생성하면 메모리가 부족하거나 누출 될 수 있습니다. 로컬 변수이므로 프로그램이 메서드를 떠날 때마다 파손된다는 사실을 알고 있습니다. – ThN

+0

.Net의 가비지 수집기가 메모리 릴리스를 처리하므로 걱정하지 마십시오. – RRUZ