C3646 和 C4430 由于头文件层次结构?

C3646 and C4430 due to header file hierarchy?

我遇到了两个编译错误:C3646 和 C4430。让我告诉你:

我指的是这个头文件:

Timer.h

class Timer {
}

这段源代码工作正常(在头文件中):

#include "Timer.h"
class Something{
    Timer timer_;

这段源代码不工作(在另一个头文件中):

class Something_else : public Singleton<Something_else> {
    friend Singleton<Something_else>;
    Timer getDebuggerTimer;

我得到的编译错误是上面提到的:

C3646 'getDebuggerTime': unknown override specifier

C4430 missing specifier - int assumed.

我已经尝试包含提到的头文件 Timer.h 但这让事情变得更糟(我相信这个文件已经通过其他包含条目包含)。

为什么编译器需要覆盖说明符? (据我所知不需要它们,我只是将 属性 添加到 class?)

在其他使用的地方,在对应的class的构造函数中(头文件中也有)填入该值。这对这个问题有什么影响吗?

供您参考:Singleton用于实现相应的设计模式。

补充说明:这个问题(乍一看)似乎与命名空间无关。

同时我已经了解了问题的根本原因:

如前所述,在源代码(头文件)中,写着:

Timer getDebuggerTimer;

Visual Studio的编辑器接受了这行源代码(Timer字下没有红波),同时按下F12进入文件Timer.h,其中定义了提到的 class。

但是,编译器似乎并不同意:编译器在头文件"Timer.h"中没有找到Timerclass的定义,而是说identifier not understood, 他给出了那个奇怪的编译信息。

我是怎么发现的?

我已将 Timer getDebuggerTimer 替换为 BlablaTimer getDebuggerTimer。这样做时,编辑器显示提示 identifier "BlablaTimer" is undefined 但编译器继续给出相同的编译器错误 C3646 和 C4430。

我现在正在进一步挖掘以了解如何解决这个问题,但我确实相信编译器不应将简单的 undefined identifier 显示为一些奇怪的 unknown override specifier