2015-07-20 84 views
-1

所以我試着給單元IdMessage.pass添加兩個屬性。所以我加入dcc32錯誤x.pas(648):E2003未聲明的標識符:'x'

TIdMessage = class(TIdBaseComponent) 
    private 
    FTaskID: Integer; 
    FNotificationID: Integer; 
    protected 
    ... all protected properties and procedures 


    public 

    ... all protected procedures and functions 

    property TaskID : Integer read FTaskID write FTaskID; 
    property NotificationID : Integer read FNotificationID write FNotificationID; 

    published 

    ...published properties 
    End; 

單位看起來不錯,但是當我嘗試編譯使用這兩個屬性,我得到了未申報的標識符錯誤的項目。我不知道爲什麼。如果我在設計時CTRL + CLICK屬性,它會將我帶到單元中的屬性,但是當我嘗試構建或編譯它時會遇到此錯誤。有什麼建議麼?

+2

嘗試重建/重新安裝Indy的設計時間包。或者更好的是,在你的代碼中擴展'TIdMessage'而不是修改Indy。 – TLama

+2

檢查您的圖書館和搜索路徑。編譯器可能不會使用修改後的源代碼,而是使用已編譯的單元(dcu)。 –

+0

@TLama我該怎麼做? – CiucaS

回答

3

儘管你在評論中說了什麼,你正在修改第三方代碼。實際上你正在製作一個叉子。編譯器錯誤只是未來麻煩的第一個症狀。編譯器不使用您編寫的代碼。編譯器正在使用不同的版本。

當然,您可以通過確保編譯器使用您的分支而不是原始代碼來使分支工作。但是,你正在爲自己的秋天而努力。下次你升級Indy時,會發生什麼?你能把你的叉子合併到新的Indy中嗎?

如果分叉是最好的解決方案,那就這樣吧。但它幾乎肯定不是。我們不知道你的實際問題是什麼,但分叉似乎不太可能是最好的前進方向。嘗試找到一種允許您不要修改Indy代碼的設計。

+0

我會這麼做的,只是將一個屬性添加到當前的Indy單元會更容易,但正如你所說的那樣,這對於未來的升級是一個糟糕的設計。我將用我想要修改的內容創建一個新課程。 – CiucaS

+1

@CiucaS這並不像你想像的那麼容易。上次我試圖修改Indy(因此需要我重新編譯它),重新編譯失敗,我被困在一個破碎的庫中。在你自己的項目中繼承這個類並且在那裏添加你需要的東西更加理想。 –