簡體   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