delphi - 来自编译器的虚假 "Undeclared Identifier"错误?

标签 delphi compiler-errors delphi-2007

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

我决定将一些事件类型声明移到它们自己的 Events 中单位,因此它们可以在多个单位中使用。当我这样做时,编译器开始提示 Undeclared identifier: 'Event Name'在最初宣布这些事件的单位中。类型声明都在 interface Events 的部分单位,我添加了Events单元到其他单元的使用子句,但它就像编译器完全忽略了 Events单元。

当您 CTRL + 单击另一个单元的类型名称时,IDE 可以轻松找到声明。将鼠标悬停在类型名称上会显示其声明的单元及其参数。即使 IDE 的通常疯狂和偏执的错误洞察功能也没有发现问题。只有编译器提示它。

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

以前有没有其他人见过这种行为,是否有解决方法?

最佳答案

我已经尝试了所有常识性建议,例如确保文件在项目中以及在其他单元的使用条款中。

由于没有人发布解决方案,我尝试了 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 的扩展点公开的少数接口(interface)单元之外,所有内容都缺少源。原来隐藏单元之一编译成DesignIDE被称为 Events .直到我将包迁移到更高版本的 Delphi 并开始获取 E2200 Package 'designide' already contains unit 'Events' 后,我才发现这一点。 .此错误消息未出现在 Delphi 2007 中。

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

    关于delphi - 来自编译器的虚假 "Undeclared Identifier"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575810/

    相关文章:

    arrays - 如何将字符串元素数组连接成字符串

    delphi - 在Delphi中声明公共(public)全局变量

    c# - IntPtr.operator +(IntPtr,int)无法调用运算符或访问器

    compiler-errors - CodeBlocks - Irrlight 编译/运行错误

    java - "Unresolved compilation pro..."异常错误

    xml - Delphi:尝试访问 XMLDocument 时出现 EInvalidPointer

    delphi - 对 DLL 进行分组以便在可执行文件中使用

    德尔福。 socket 。仅在一个节点/MAC 地址上的 TIdHttp 套接字连接上访问被拒绝。必发API

    java - 这个Java例程如何转换成Delphi?

    delphi - 将位图转换为 RTF 后,图像在 ms word 中不显示(但在写字板中显示)