编译以下代码时:
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);
答案 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
的有效值为1
至5
。您使用0
至4
。再次,那将在运行时咬人。tempChar
对于可以容纳多个字符的内容来说是一个糟糕的名称。OnActivate
似乎是执行此代码的一个不寻常的地方。此事件将多次运行。也许您应该在启动时执行此代码。在任何情况下,像这样的代码不应该在事件处理程序中,而应该移动到事件处理程序可以调用的单独方法。