繁体   English   中英

错误:“ IntToStr”的游标没有重载

[英]Error: No overloaded versoin of 'IntToStr'

编译以下代码时:

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;

使用以另一种形式定义的线:

unit uGlobal;

interface

  type
    aLines = array[1..5] of integer;
    aLinesFinal = array of aLines;

  var
    Lines : aLinesFinal;

implementation

end.

我收到以下错误:没有可用这些参数调用的'IntToStr'重载版本。 错误指向该行:

Lines[i,i2] := IntToStr(tempChar);

这是tempChar的声明:

tempChar : String;

它是一个字符串。 这是编译器拒绝的调用:

Lines[i,i2] := IntToStr(tempChar);

IntToStr函数具有各种重载,它接受整数输入参数并返回字符串。 您不能将字符串传递给IntToStr 也许您打算写:

Lines[i,i2] := StrToInt(tempChar);

其他一些评论:

  • 我看起来不像您初始化Lines 这意味着尽管代码可以编译,但在运行时将失败。
  • 由于您将aLines声明为aLines array[1..5] of integer ,因此i2的有效值为15含)。 您使用0404 再次,这将在运行时咬伤。
  • 您确实应该紧急地启用范围检查,因为当您开始执行此代码时,该设置将揭示上面的错误,并且毫无疑问会更多。
  • 在我看来, tempChar是一个不好的名字,因为它可以容纳多个字符。
  • 正如@TLama指出的那样, OnActivate似乎是执行此代码的不寻常地方。 此事件将运行多次。 也许您应该在启动时执行此代码。 无论如何,这样的代码都不应放在事件处理程序中,而应移到事件处理程序可以调用的单独方法中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM