编译以下代码时:
procedure TMainWin.FormActivate(Sender: TObject);
var LineRaw : String;
LinesFile : TextFile;
i, i2 : integer;
tempChar : String;
CurTempCharPos : integer;
begin
AssignFile(LinesFile, 'Lines.txt');
Reset(LinesFile);
i := 0;
tempChar := '';
CurTempCharPos := 1;
while not EoF(LinesFile) do begin
i := i+1; //ticker
ReadLn(LinesFile, LineRaw);
for i2 := 0 to 4 do begin
tempChar := LineRaw[CurTempCharPos] + LineRaw[CurTempCharPos +1];
Lines[i,i2] := IntToStr(tempChar);
tempChar := '';
CurTempCharPos := CurTempCharPos + 3;
end;
end;
CloseFile(LinesFile);
end;
Run Code Online (Sandbox Code Playgroud)
使用另一种形式定义行:
unit uGlobal;
interface
type
aLines = array[1..5] of integer;
aLinesFinal = array of aLines;
var
Lines : aLinesFinal;
implementation
end.
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:没有可以使用这些参数调用的'IntToStr'的重载版本.该错误指向该行:
Lines[i,i2] := IntToStr(tempChar);
Run Code Online (Sandbox Code Playgroud)
这是以下声明tempChar:
tempChar : String;
Run Code Online (Sandbox Code Playgroud)
这是一个字符串.这是编译器拒绝的调用:
Lines[i,i2] := IntToStr(tempChar);
Run Code Online (Sandbox Code Playgroud)
该IntToStr函数具有各种重载,接受整数输入参数并返回字符串.你不能传递一个字符串IntToStr.也许你打算写:
Lines[i,i2] := StrToInt(tempChar);
Run Code Online (Sandbox Code Playgroud)
其他一些评论:
Lines.这意味着虽然代码可能会编译,但它会在运行时失败.aLines的array[1..5] of integer,对于有效值i2是1对5包容性.你0用来4包容.再次,这将在运行时咬人.tempChar,对于可以容纳多个角色的东西而言,这是一个糟糕的名称.OnActivate执行此代码似乎是一个不寻常的地方.此事件将多次运行.也许您应该在启动时执行此代码.在任何情况下,这样的代码不应该在事件处理程序中,应该移动到事件处理程序可以调用的单独方法.