由于头文件层次结构,C3646和C4430?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由于头文件层次结构,C3646和C4430?相关的知识,希望对你有一定的参考价值。
我遇到了两个编译错误: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':未知的覆盖说明符
C4430缺少说明符 - 假设为int。
我试图包括提到的头文件Timer.h
,但这使事情变得更糟(我相信这个文件已经包含在其他包含条目中)。
为什么编译器期望覆盖说明符? (据我所知,他们不需要它们,我只是在一个类中添加一个属性?)
在使用它的其他地方,该值将填入相应类的构造函数中(也在头文件中)。这会对这个问题产生什么影响吗?
供您参考:Singleton
用于实现相应的设计模式。
一个额外的评论:问题(乍一看)似乎与命名空间无关。
同时我了解问题的根本原因:
如前所述,在源代码(头文件)中,有以下内容:
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
。
以上是关于由于头文件层次结构,C3646和C4430?的主要内容,如果未能解决你的问题,请参考以下文章
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
声明Windows API结构(DCB)的对象 - 错误C4430:缺少类型说明符 - 假定为int