当一个变量被定义并且它似乎被这样识别时,什么会导致 "C2065: undeclared identifier"?

What could cause "C2065: undeclared identifier" when a variable is defined and it seems to be recognized as such?

在我的 Qt5 C++ 桌面项目的 PRO 文件中,我有以下声明:

DEFINES += PROJECT_VERSION=\\"1.0.0.0\\"

在class的头文件中,比如Foo,我声明并定义了一个获取版本的方法,如下所示:

QString version() { return PROJECT_VERSION; }

当我尝试编译代码时,出现以下错误:

error: C2065: 'PROJECT_VERSION': undeclared identifier

如屏幕截图所示,PROJECT_VERSION 颜色编码正确,工具提示也正确,在我看来它已被识别。那为什么会出现这个错误?

我不知道是什么导致了这种情况,也不知道这种事情是如何发生的。任何帮助将不胜感激。

我只想提供相关信息,我对问题的描述过于简单了。

事实证明,来自 SUBDIRS 层次结构的另一个 项目 B 包含 header 和 version() 方法。 PROJECT_VERSION 的声明发生在 Project APRO 文件中,其中一部分是 header,但是不在 项目 BPRO 文件中。 Qt Creator 从 项目 A 中看到 PROJECT_VERSION 和代码完成、颜色编码和工具提示工作(我认为这就是 @StoryTeller 在 "static analysis" 下的意思)。然而,编译器没有,所以它会抱怨。

造成混淆的原因是错误没有发生在 项目 B 中,其中包含 header,但在 中项目 A,其中 header 和 PROJECT_VERSION 的声明。所以一开始看起来很矛盾。

解决方案:将DEFINES += PROJECT_VERSION=\\"1.0.0.0\\"添加到项目BPRO文件中现在它编译得很好。

再次感谢@StoryTeller 提供的有用提示。