2013-03-22 86 views
1

我在Delphi 2007中編寫了一個designtime包。編譯器僞造的「Undeclared Identifier」錯誤?

我決定將一些事件類型聲明移到他們自己的Events單元中,以便它們可以在多個單元中使用。當我做編譯器開始在最初聲明這些事件的單元中抱怨Undeclared identifier: 'Event Name'。類型聲明全部位於Events單元的interface部分,我已將Events單元添加到其他單元的使用條款,但它的編譯器完全忽略Events單元。

當您在找到聲明時,IDE沒有問題CTRL +單擊其他單元的類型名稱。將鼠標懸停在類型名稱上會顯示其聲明的單位及其參數。即使通常craptastic和偏執Error Insight功能的IDE沒有看到問題。只有編譯器纔會抱怨。

我試圖在另一個更簡單的包項目中重現此問題,以嘗試隔離它但我無法重現它。

以前有沒有其他人看到過這種行爲,有沒有解決辦法?

+0

您是否真的將新單元包含在您的項目中? – 2013-03-22 17:05:39

+0

是的。它在dpk中並在項目經理中顯示。我甚至檢查過dproj文件,並且有一個DCCReference。它與使用它的所有其他單元文件位於同一文件夾中。 – 2013-03-22 17:08:03

+1

我們如何重現這一點,以便我們知道我們正在運行與您相同的代碼? – 2013-03-22 17:42:01

回答

4

我已經嘗試了所有的常識建議,如確保文件在項目和其他單位的使用條款。

由於沒有人發佈解決方案,我嘗試了Ken White'sWouter van Nifterick's的建議。

  • 關閉該項目,並重新啓動IDE - 沒有變化
  • 搜索我的Events.pas或Events.dcu系統上的每個驅動器 - 一個在我的項目是唯一的一個。

東西的工作,我不知道爲什麼,就是重命名Events.pas到別的東西。我使用項目管理器將其重命名並重新編譯。所有的Undeclared Identifier錯誤都消失了。我將它重新命名爲Events,錯誤又回來了。誰知道?

只是出於好奇,我對我的系統上的每個pas和inc文件進行了文本搜索,看看Events是否被用作某處的標識符(我知道它不應該有所作爲,但是......永遠不會知道) 。沒有。沒有變量,類型或函數調用Events

作爲一項完整性檢查,我用少數幾個單元創建了一個簡單的項目,其中一個被稱爲Events,並帶有一些類型聲明。所有其他單位將其納入其使用條款。編譯器在解析類型標識符時沒有問題。我完全不知道爲什麼我的另一個項目中的Events單元窒息。

更新

我終於想通了,爲什麼我得到這個錯誤。我寫的包使用了開放工具api(OTA),所以它需要DesignIDE包。 DesignIDE僅作爲預編譯的dcp和bpl提供,因此除了少數作爲IDE的擴展點公開的接口單元外,其他所有源都缺失。事實證明,編譯爲DesignIDE隱藏的單元之一稱爲Events。直到我將我的軟件包遷移到Delphi的更高版本並開始獲得E2200 Package 'designide' already contains unit 'Events'之前,我才發現這一點。這個錯誤信息沒有出現在Delphi 2007中。

我試圖在較簡單的程序包中分離問題無法重現,因爲我已經從它的依賴中排除了DesignIDE包,沒有意識到它是錯誤的來源。

+0

+1更新答案。感謝分享! – NGLN 2013-09-17 19:15:39