2012-06-21 64 views
5

我必須移動在system32文件夾下的文件時,我用這個代碼:爲什麼我會得到「E2026預期的恆定表達式」?

//-----------FUNCTION---------------- 
function GetWindowsSystemDir(): String; 
var 
    vlBuff: Array[0..MAX_PATH-1] of Char; 
begin 
    getSystemDirectory(vlBuff, MAX_PATH); 
    Result := vlBuff; 
end; 
//----------------------------------- 

const 
    SMyFile = GetWindowsSystemDir+'\intructions.txt'; //error here, line 87 
var 
    S: TStringList; 
begin 
    S := TStringList.Create; 
    try 
    S.Add('intructions'); 
    S.SaveToFile(SMyFile); 
    finally 
    S.Free; 
    end; 
end; 

編譯時給我的錯誤:

[DCC Error] Unit1.pas(87): E2026 Constant expression expected 

感謝。

回答

14

由於編譯器錯誤消息指出,它需要一個常量表達式,您在初始化常量。但是你在那裏調用一個函數,編譯器不會在編譯時評估它。

聲明一個變量代替,併爲其分配代碼的規則開始-end塊內:

var 
    SMyFile: string; 
    S: TStringList; 
begin 
    S := TStringList.Create; 
    try 
    S.Add('intructions'); 
    SMyFile := GetWindowsSystemDir+'\intructions.txt'; 
    S.SaveToFile(SMyFile); 
    finally 
    S.Free; 
    end; 
end; 
+0

謝謝,完美的答案! –

+0

@GiacomoKingPatermo:如果它解決了你的問題,你應該「接受」答案。 – LightBulb

+3

@LightBulb,當您發佈問題和允許您接受答案時,會有一段時間延遲。由於Rob在問題發佈後僅僅兩分鐘就發佈了他的答案,所以沒有足夠的時間過去。請不要嘮叨接受什麼時候海報不可能這樣做。 :-)請參閱[常見問題](http://stackoverflow.com/faq)瞭解如何接受工作的解釋。 –

相關問題