我正在 Delphi 2007 中编写设计时包。
我决定将一些事件类型声明移到它们自己的 Events
中单位,因此它们可以在多个单位中使用。当我这样做时,编译器开始提示 Undeclared identifier: 'Event Name'
在最初宣布这些事件的单位中。类型声明都在 interface
Events
的部分单位,我添加了Events
单元到其他单元的使用子句,但它就像编译器完全忽略了 Events
单元。
当您 CTRL + 单击另一个单元的类型名称时,IDE 可以轻松找到声明。将鼠标悬停在类型名称上会显示其声明的单元及其参数。即使 IDE 的通常疯狂和偏执的错误洞察功能也没有发现问题。只有编译器提示它。
我尝试在另一个更简单的包项目中重现此问题以尝试隔离它,但我无法重现它。
以前有没有其他人见过这种行为,是否有解决方法?
最佳答案
我已经尝试了所有常识性建议,例如确保文件在项目中以及在其他单元的使用条款中。
由于没有人发布解决方案,我尝试了 Ken White's和 Wouter van Nifterick's建议。
仅限 起作用的事情,我不知道为什么,是将 Events.pas 重命名为其他名称。我使用项目管理器重命名它并重新编译。所有
Undeclared Identifier
错误就消失了。我将其重命名为 Events
错误又回来了。谁知道?出于好奇,我对系统上的每个 pas 和 inc 文件进行了文本搜索,以查看是否为
Events
在某处被用作标识符(我知道它不应该有所作为,但......你永远不知道)。没有。没有调用 Events
的变量、类型或函数.作为健全性检查,我创建了一个包含几个单元的简单项目,其中一个名为
Events
带有一些类型声明。所有其他单位都将其包含在其使用条款中。编译器解析类型标识符没有问题。我完全不知道它为什么会在 Events
上窒息。我的另一个项目中的单元。更新
我终于弄清楚了为什么我会收到这个错误。我正在编写的软件包使用了开放工具 api(OTA),因此它需要
DesignIDE
包裹。 DesignIDE
仅作为预编译的 dcp 和 bpl 提供,因此除了作为 IDE 的扩展点公开的少数接口(interface)单元之外,所有内容都缺少源。原来隐藏单元之一编译成DesignIDE
被称为 Events
.直到我将包迁移到更高版本的 Delphi 并开始获取 E2200 Package 'designide' already contains unit 'Events'
后,我才发现这一点。 .此错误消息未出现在 Delphi 2007 中。我试图在一个更简单的包中隔离问题无法重现它,因为我排除了
DesignIDE
从它的依赖项中打包,没有意识到它是错误的根源。
关于delphi - 来自编译器的虚假 "Undeclared Identifier"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575810/