我遇到两个编译错误:C3646和C4430。让我给你演示:
我指的是这个头文件:
计时器
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
,但这使情况变得更糟(我相信此文件已经通过其他包含条目包含在内)。为什么编译器期望覆盖说明符? (据我所知不需要它们,我只是在类中添加一个属性?)
在使用它的其他地方,该值填充在相应类的构造函数中(也包含在头文件中)。这对这个问题有影响吗?
供您引用:
Singleton
用于实现相应的设计模式。额外说明一下:问题(乍一看)似乎与 namespace 无关。
最佳答案
同时,我了解了问题的根本原因:
如前所述,在源代码(头文件)中写道:
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
。
关于c++ - C3646和C4430是否由于头文件层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49025931/