내 프로그램에서 클래스를 사용하려고합니다.클래스의 멤버 변수를 편집 할 때 오류가 발생했습니다.
TStack = Class
Public
constructor Create; Overload;
Procedure Add(Frm:TForm);
Procedure Remove();
Procedure Do_Close;
Private
List : Array[1..Max_Forms] of Rec;
Count : Byte;
End;
생성자 :
constructor TStack.Create;
begin
Self.Count := 0;
end;
Procedure TStack.Add(Frm:TForm);
begin
Inc(Self.Count);
List[Count].Form := @Frm;
List[Count].Width := Frm.Width;
List[Count].Height := Frm.Height;
List[Count].left := Frm.Left;
List[Count].Top := Frm.Top;
end;
나는 카운트 변수의 값을 변경할 수 없습니다! 런타임 오류가 발생합니다 : 액세스 위반 .... 주소 000001E4 쓰기
무엇이 문제입니까?!
Rec = Record
Form : ^TForm;
Maximized : Boolean;
Width,
Height,
left,
Top : Integer;
End;
그리고
Procedure TStack.Do_Close;
var
i : integer;
MyForm : TForm;
begin
i := .....some code here.......;
MyForm := @List[i].Form;
ShowMessage('I will close '+MyForm.Caption);
MyForm.Close;
end;
과 같이 생성자를 호출 :이 같은 구조는 각 양식에 대한 포인터를 저장하기 위해 노력하고있어
을 자세한 내용
'Count'를 초기화하는 방법 :
Stack.Create;
생성자의 행 또는 추가의 행 중 어떤 행이 충돌합니까? – Blorgbeard
많은 문제가 있습니다. 아마 당신을 아프게하는 것은 당신이 그 대상을 정확하게 창조하지 않았다는 것입니다. 당신은 그 코드를 보여주지 않았습니다. 제발. 바이트가 아닌 정수를 사용하십시오. 정적 배열을 사용하지 마십시오. 동적 배열 또는'TList'을 사용하십시오. 0부터 인덱스 배열. 지역 변수의 주소를 가져 가지 마십시오. –
예,'Stack.create'가 작동하지 않지만'stack = Tstack.create'가 몇 가지 문제를 해결했습니다 (왜?!)! 왜 정적 배열을 사용하면 안되나요?! "지역 변수의 주소를 사용하지 마십시오"라는 것은 무엇을 의미합니까! 고마워요 :) – Jessica