来自编译器的Bogus“Undeclared Identifier”错误?

时间:2013-03-22 16:51:38

标签: delphi compiler-errors delphi-2007

我正在Delphi 2007中编写一个设计时包。

我决定将一些事件类型声明移动到他们自己的Events单元中,以便它们可以在多个单元中使用。当我这样做时,编译器开始在最初声明这些事件的单元中抱怨Undeclared identifier: 'Event Name'。类型声明都在interface单元的Events部分中,我已将Events单元添加到其他单元的uses子句中,但它与编译器完全忽略Events 1}}单位。

当您 CTRL +单击其他单位的类型名称时,IDE可以轻松找到声明。将鼠标悬停在类型名称上会显示其声明的单位及其参数。即使IDE的通常的craptastic和偏执 Error Insight 功能也没有出现问题。只有编译器抱怨它。

我尝试在另一个更简单的软件包项目中重现此问题,试图将其隔离但我无法重现它。

之前有没有其他人看过这种行为并且有解决方法吗?

1 个答案:

答案 0 :(得分:4)

我已经尝试了所有常识建议,例如确保文件位于项目中以及其他单位的uses子句中。

由于没有人发布解决方案,我尝试了Ken White'sWouter van Nifterick's

  • 关闭项目并重新启动IDE - 无需更改
  • 在我的系统上搜索了每个驱动器上的Events.pas或Events.dcu - 我项目中的那个是唯一一个。

唯一有效的方法,我不知道为什么,将Events.pas重命名为其他内容。我使用项目管理器重命名它并重新编译。所有Undeclared Identifier错误都消失了。我将其重命名为Events,错误又回来了。谁知道?

出于好奇,我对我系统上的每个pas和inc文件进行了文本搜索,看看Events是否被用作某个地方的标识符(我知道它应该没有区别但是... ya从来不知道)。没有。没有名为Events的变量,类型或函数。

作为一个完整性检查,我创建了一个包含少量单元的简单项目,其中一个单元称为Events,带有一些类型声明。所有其他单位都将其包含在其使用条款中。编译器在解析类型标识符时没有遇到任何问题。我完全不知道为什么它在我的另一个项目的Events单位上窒息了。

<强>更新

我终于明白了为什么我收到这个错误。我写的包使用了开放工具api(OTA),所以它需要DesignIDE包。 DesignIDE仅作为预编译的dcp和bpl提供,因此除了作为IDE的扩展点公开的少数接口单元之外,所有内容都缺少源。事实证明,编译成DesignIDE隐藏单位之一被称为Events。直到我将我的包迁移到更高版本的Delphi并开始获得E2200 Package 'designide' already contains unit 'Events'之前,我才发现这一点。此错误消息未出现在Delphi 2007中。

我试图在一个更简单的包中隔离问题无法重现它,因为我已经从它的依赖项中排除了DesignIDE包,没有意识到它是错误的来源。