這個程序編譯成功:
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure Foo;
var
Text: string;
rNum: Double;
begin
rNum := StrToFloat(Text);
Text := IntToStr(round(rNum));
Text := FloatToStrF(sqr(rNum), ffFixed, 8, 3);
Text := FloatToStrF(sqrt(rNum), ffFixed, 8, 3);
Text := FloatToStr(Frac(rNum));
Text := IntToStr(trunc(rNum));
Text := FloatToStr(Frac(rNum));
end;
begin
end.
我爲了做一個簡單的程序改變了你的代碼,可以輕鬆發佈。
這表明你的問題不在於你展示的代碼。問題在別的地方。弄清楚具體的問題不應該成爲你學習的主要教訓。主要的教訓應該是如何簡化問題並進行明確的診斷。
你應該做的是從你當前的代碼開始,並開始剝離出來。當你去除對行爲有影響的東西時,你已經學到了一些東西。把這個東西放回去,找出爲什麼刪除它改變了行爲。那時你應該有一個解釋。
現在考慮這個方案:
{$APPTYPE CONSOLE}
uses
SysUtils;
const
Frac: Double = 0.0;
procedure Foo;
var
Text: string;
rNum: Double;
begin
rNum := StrToFloat(Text);
Text := IntToStr(round(rNum));
Text := FloatToStrF(sqr(rNum), ffFixed, 8, 3);
Text := FloatToStrF(sqrt(rNum), ffFixed, 8, 3);
Text := FloatToStr(Frac(rNum));
Text := IntToStr(trunc(rNum));
Text := FloatToStr(Frac(rNum));
end;
begin
end.
它無法編譯上指Frac
和編譯器會報告該錯誤的行:
[dcc32 Error]: E2066 Missing operator or semicolon
所以,你可能有類似的問題。您將定義一個額外的符號來隱藏您想要引用的符號。
您的代碼段中沒有語法錯誤。 – 2014-11-23 15:20:39
檢查這三條線之前的線。如果之前的行缺少一個';',那麼它不能在該行上被檢測到,因爲'''* * *本身可以放在一個新行上。只有當編譯器看到'edtFrac'時,它才能說出真的沒有';'。 – hvd 2014-11-23 15:23:28
這3行中的每一行都給了我這個錯誤。如果我註釋掉這一行,它會給我下一行的錯誤。如果我將這三行中的任意一行移到我的代碼的頂部,我仍然會遇到這個問題。我將完整的代碼添加到原始帖子中。 – user3616928 2014-11-23 15:37:05