Q&A

  • 클래스 내에 선언한 TLabel을 Form1폼에 올리고 싶은데요...
<!--CodeS-->
type
// TForm1이 정의되어 있음
  ManType=class
            public
              X, Y    :integer;
              L, K, B :integer;
              BounX,BounY:integer;
              Vx, Vy:integer;
              Skip  :boolean;
              
          end;

  ManRealType=class(ManType)
    public
      Mass: TLabel;
      constructor Create(Owner:TComponent; LR:integer; Index:integer; MassColor:TColor; e:integer);
      destructor Destroy;
  end;

var
  Man:array[1..2,1..200]of ManRealType;
  Form1:TForm1;


constructor ManRealType.Create(Owner:TComponent; LR:integer; Index:integer; MassColor:TColor; e:integer);
begin
  inherited Create;
  Mass := TLabel.Create(Owner);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
    Man[1,1].Create(Form1, 1, i, clGreen, e);
end;


<!--CodeE-->

위와 같이 하였는데요...
(Form1에는 버튼 하나 달랑 올라가 있습니다)
트레이스를 밟아 보니까 Mass := TLabel.Create(Owner); 에서...
Access Violation error가 뜹니다.



도무지 감이 안 잡힙니다. 어떻게 해야 좋을까요?
2  COMMENTS
  • Profile
    모영철 2005.03.25 19:14
    아 집에 제가 상속테스트 한다고 이와 비슷한예제가 있는데..

    지금 보기에 딱히 이거다 라고 설명 드리기엔 제가 너무 허접하여

    약간의 도움이나마 될까 하여 말씀드리면

    VCL을 생각하시면 답이 나올거 같습니다.

    이상한부분이 Mantype는 아무런 클래스도 상속받지 않았고..

    constructor도 선언되 있지 않은데..inherited 는 이상하구요..

    Man[1,1].Create(Form1, 1, i, clGreen, e);

    이것도 원래는 이런식아닌가요?

    Man[1,1] := ManRealType.Create(Form1, 1, i, clGreen, e);

    2차원 맨 포인터 배열이 있고 그배열에 객체를 생성시켜 그 포인터를 넘겨주고

    그 포인터를 이용하여 객체를 제어합니다. 이런식의 모냥이 나와야 하는데...

    (포인터라고 말해도 되는지 모르겠지만.제가보기엔 포인터 같음)

    참 희안한 답변이지만 도움이 되길 바랍니다.

  • Profile
    선우호 2005.03.25 18:36
    Man[1,1].Create(Form1, 1, i, clGreen, e);

    위와 같이 하시는건 당연히 에러 아닌가요?

    Man[1,1] := ManRealType.Create(xxxx,xxx,x,x);

    이게 맞을듯 싶습니다.

    수고하세요.