2012-06-21 2 views
5

Ich habe eine Datei im system32 Ordner zu verschieben, habe ich diesen Code:Warum bekomme ich "E2026 Konstanter Ausdruck erwartet"?

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

gibt mir Fehler beim Kompilieren:

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

Dank.

Antwort

14

Wie die Compiler-Fehlermeldung anzeigt, erwartet sie einen konstanten Ausdruck, bei dem Sie die Konstante initialisieren. Aber Sie rufen dort eine Funktion auf, und der Compiler wird sie zur Kompilierzeit nicht auswerten. beginnen-End-Block des Codes

Deklarieren ein Variable statt, und es in dem regulären zuweisen:

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

Danke, perfekte Antwort! –

+0

@ GiacomoKingPatermo: Sie sollten die Antwort "akzeptieren", wenn es Ihr Problem löst. – LightBulb

+3

@LightBulb, es gibt eine Zeitverzögerung zwischen dem Senden einer Frage und dem Beantworten einer Antwort. Da Rob seine Antwort nur zwei Minuten nach der Veröffentlichung der Frage veröffentlicht hatte, war nicht genug Zeit vergangen. Bitte nageln Sie nicht zu akzeptieren, wenn es dem Poster nicht möglich ist. :-) Siehe [FAQ] (http://stackoverflow.com/faq) für eine Erklärung, wie das Akzeptieren funktioniert. –