错误:没有'IntToStr'的重载版本

Alp*_*111 0 delphi delphi-7

编译以下代码时:

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)

Dav*_*nan 7

这是以下声明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.这意味着虽然代码可能会编译,但它会在运行时失败.
  • 既然你宣布aLinesarray[1..5] of integer,对于有效值i215包容性.你0用来4包容.再次,这将在运行时咬人.
  • 你真的应该在紧急情况下启用范围检查,因为当你开始执行这个代码时,设置将揭示上面的错误,毫无疑问还有更多.
  • 在我看来tempChar,对于可以容纳多个角色的东西而言,这是一个糟糕的名称.
  • 正如@TLama指出的那样,OnActivate执行此代码似乎是一个不寻常的地方.此事件将多次运行.也许您应该在启动时执行此代码.在任何情况下,这样的代码不应该在事件处理程序中,应该移动到事件处理程序可以调用的单独方法.