错误:没有超载版本的' IntToStr#39;

时间:2014-09-08 08:21:34

标签: 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;

以另一种形式定义行:

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);

1 个答案:

答案 0 :(得分:7)

以下是tempChar的声明:

tempChar : String;

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

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

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

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

其他一些评论:

  • 我似乎没有初始化Lines。这意味着虽然代码可能会编译,但它会在运行时失败。
  • 由于您将aLines声明为array[1..5] of integer,因此i2的有效值为15。您使用04。再次,那将在运行时咬人。
  • 您真的应该在紧急情况下启用范围检查,因为当您开始执行此代码时,该设置将揭示上述错误,毫无疑问还有更多错误。
  • 在我看来,tempChar对于可以容纳多个字符的内容来说是一个糟糕的名称。
  • 正如@TLama所指出的,OnActivate似乎是执行此代码的一个不寻常的地方。此事件将多次运行。也许您应该在启动时执行此代码。在任何情况下,像这样的代码不应该在事件处理程序中,而应该移动到事件处理程序可以调用的单独方法。