我写了一个自己的过程,其中包括2个数组和一个TextFile。在我在其上编写的表单上可以工作,但是当我尝试在其他表单上使用它时,会出现此错误消息。 我在类型上声明了一个数组,并且过程中的两个数组都使用了该类型的数组,但在另一种形式上,它表示即使我以完全相同的方式声明了数组,它们也不相同。 我的代码示例:
Form1
Type
Array = array[1..20] of string; //declaring the type of array
...
Private
ArrUser : Array;
ArrPassword : Array;
tFile: TextFile;
...
Var
Procedure Write(var tFile; var arrUser, ArrPassword :
Array) ;
...
Procedure Write(var tFile; var arrUser, ArrPassword :
Array) ;
Var
Count, position, length : integer;
Line : string;
Begin
Count := 0;
AssignFile(tFile, 'sign in.txt');
Reset (tFile);
While NOT EOF(tFile) do
Begin
Inc(count) ;
ReadLn(tFile, line) ;
Position := pos(' ', line) ;
Length := length(line) ;
ArrUser[count] := copy(line, 1, position - 1);
Delete(line, 1, position) ;
ArrPassword[count] := line;
End;
Closefile(tFile) ;
End;
Form2
Type
Array = array[1..20] of string; //declaring the type of array
...
Private
ArrUser : Array;
ArrPassword : Array;
tFile: TextFile ;
...
Begin
Write(tFile, arrUser, ArrPassword) ; //error is shown here
at the arrays
End;
答案 0 :(得分:0)
您的过程期望使用Form1.Array
类型的参数,但是您正在向其传递Form2.Array
类型的变量。而且您正在通过var
引用传递参数,因此传递的变量必须完全匹配参数的类型。这就是编译器错误所抱怨的。
即使您没有使用var
引用,这两种数组类型仍然是彼此不同的类型,彼此之间不是assignment compatible。
您需要摆脱一种数组类型,并在两个单元中使用另一种数组类型。例如:
unit Form1;
interface
type
Array = array[1..20] of string;
...
private
ArrUser : Array;
ArrPassword : Array;
...
Procedure Write(var tFile; var arrUser, ArrPassword : Array);
implementation
...
Procedure Write(var tFile; var arrUser, ArrPassword : Array);
begin
...
end;
...
end.
unit Form2;
uses
..., Form1;
...
private
ArrUser : Form1.Array;
ArrPassword : Form1.Array;
...
implementation
...
begin
Write(tFile, ArrUser, ArrPassword) ;
end;
...
end.
为了获得更好的可维护性,您应该创建第三个单元来声明数组类型,然后在需要访问数组类型的位置use
声明该单元。
unit MySharedUnit;
interface
type
Array = array[1..20] of string;
implementation
end.
unit Form1;
interface
uses
..., MySharedUnit;
...
private
ArrUser : MySharedUnit.Array;
ArrPassword : MySharedUnit.Array;
...
Procedure Write(var tFile; var arrUser, ArrPassword : MySharedUnit.Array);
implementation
...
Procedure Write(var tFile; var arrUser, ArrPassword : MySharedUnit.Array);
begin
...
end;
...
end.
unit Form2;
uses
..., MySharedUnit, Form1;
...
private
ArrUser : MySharedUnit.Array;
ArrPassword : MySharedUnit.Array;
...
implementation
...
begin
Write(tFile, ArrUser, ArrPassword) ;
end;
...
end.