我遇到了两个编译错误: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&#39; getDebuggerTime&#39;:未知覆盖说明符
C4430缺少说明符 - 假设为int。
我试图包含上面提到的头文件Timer.h
,但这会让事情变得更糟(我相信这个文件已经通过其他包含条目包含在内)。
为什么编译器需要覆盖说明符? (据我所知,他们没有必要,我只是在课堂上添加一个属性?)
在使用它的其他地方,该值将填入相应类的构造函数中(也在头文件中)。这会对这个问题产生什么影响吗?
供您参考:Singleton
用于实现相应的设计模式。
额外评论:问题(乍看之下)似乎与命名空间无关。
答案 0 :(得分:0)
与此同时,我已经理解了问题的根本原因:
如上所述,在源代码(头文件)中,写有:
Timer getDebuggerTimer;
Visual Studio的编辑器接受这行源代码(单词Timer
下没有红色波浪),在按F12
的同时,我进入Timer.h文件,其中定义了上述类。
但是,编译器似乎不同意:编译器在头文件“Timer.h”中找不到Timer
类的定义,但是他没有给出identifier not understood
,而是那个奇怪的编译信息。
我是怎么发现的?
我已将Timer getDebuggerTimer
替换为BlablaTimer getDebuggerTimer
。当这样做时,编辑器显示提示identifier "BlablaTimer" is undefined
,但编译器继续给出相同的编译器错误C3646和C4430。
我现在正在深入挖掘,以便知道如何解决这个问题,但我确实认为简单的undefined identifier
不应该被编译器显示为奇怪的unknown override specifier
。