델파이를 시작한 초보입니다..
이곳에서 많은 정보를 얻어가다가 찾지 못한 정보가 있어서 질문 드립니다..
함수나 프로시저를 통해서 Call By Referce 방식을 사용하여 동적으로 생성한 다중 배열을 인수로 넘길때 에러가 나네요..
예제..
에러가 나는 2차원 Array Code..
unit Unit1;
interface
Procedure Exam1();
Function Exam2(var Arr: Array of Array of Variant):Boolean;
implementation
Procedure Exam1();
var
Arr : Array of Array of Variant;
i : Integer; T: Boolean;
begin
SetLength(Arr, 10);
for i := 0 to 9 do
SetLength(Arr[i], 20);
T := Exam2(Arr);
end;
Function Exam2(var Arr: Array of Array of Variant):Boolean;
var
i, j : integer;
begin
for i:= 0 to 9 do
for j:= 0 to 19 do
if Arr[i, j] = '' then
Result := True
else
Result := False;
end;
end.
위와 같이 코딩을 했을때 다음과 같은 에러가 나네요..
[Error] Unit1.pas(6): Identifier expected but 'ARRAY' found
[Error] Unit1.pas(18): Incompatible types: 'Array' and 'dynamic array'
[Error] Unit1.pas(21): Identifier expected but 'ARRAY' found
[Error] Unit1.pas(28): Array type required
[Fatal Error] Project1.dpr(8): Could not compile used unit '..\..\..\Program Files\Borland\Delphi5\Projects\Unit1.pas'
다중 Array가 아닌 Single Array로 할 경우는 문제가 없는데.. 2차원 배열만 하면 에러가 나네요..
아래와 같은 경우는 에러가 나지 않는데 말입니다..
에러가 나지 않는 1차원 Array Code..
unit Unit1;
interface
Procedure Exam1();
Function Exam2(var Arr: Array of Variant):Boolean;
implementation
Procedure Exam1();
var
Arr : Array of Variant;
i : Integer; T: Boolean;
begin
SetLength(Arr, 10);
T := Exam2(Arr);
end;
Function Exam2(var Arr: Array of Variant):Boolean;
var
i : integer;
begin
for i:= 0 to 9 do
if Arr[i] = '' then
Result := True
else
Result := False;
end;
end.
제가 뭔가 잘못 코딩을 하고 있는데 어떻게 해결해야 할지 모르겠습니다..
전역변수를 쓰는 것도 한계가 있어서리..
오늘도 좋은 하루 되세요.. ^^
하하.. 요즘 syntax 문제가 많이 올라오는것 같군요..
정확한 답변일지 모르나.. 혹은 원하는 답변이 아닐지 모르나..
어쨌든 syntax상으로, 실행했을 때 원하는 결과값-->OK!
근데, 이렇게 꼭 써야할까요?????
Pointer 쓰면 안될까요??
하하.. 어렵나요??
전 pointer가 더 쉽던데.. 흠흠..
어쨌든.. 아래와 같습니다..
<!--CodeS-->
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
vArray = Array of Array of Variant;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
Procedure Exam1();
Function Exam2(var Arr: vArray):Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.Exam1;
var
Arr : vArray; //Variant Type이므로 꼭 할당(Create 혹은 Assign)한 내역이 있다면
//각 개별로 Free 해 줘야만 합니다..
//어떤 Type으로 할당할지 몰라서 여기서는 pass
i,j : Integer;
T: Boolean;
begin
SetLength(Arr, 10);
for i := 0 to 9 do SetLength(Arr[i], 20);
for i:= 0 to 9 do
for j:= 0 to 19 do Arr[i,j] := '';
T := Exam2(Arr);
If T then
ShowMessage('어쨌든 Success!!')
Else
ShowMessage('이런 된장!!');
end;
function TForm1.Exam2(var Arr: vArray): Boolean;
var
i, j : integer;
begin
for i:= 0 to 9 do
for j:= 0 to 19 do
if Arr[i, j] = '' then
Result := True
else
Result := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Exam1;
end;
end.
<!--CodeE-->