c++ - C3646和C4430是否由于头文件层次结构?

标签 c++ visual-studio compiler-errors header-files

我遇到两个编译错误: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/

相关文章:

visual-studio - 编辑 XAML/Silverlight 文件时的 Visual Studio 性能

macos - Xamarin 安卓。断点在 PCL 中不起作用,但在 Android 项目中起作用

c++ - 使用extern时C++中的重新声明错误

c++ - 获取 Windows API 标题栏图标

c++ - 如何在 C++ 中构建执行异步后台任务的对象

c++ - 有一个dll项目,我可以强制将它链接到一个静态库吗?

c++ - 具有完美转发的对的返回元素

.net - 如何减少 .NET 中的 MSTest 执行时间?

c++ - 在Mac上找不到ifstream'文件

c++ - 使用 Clion 的 C++ 简单程序 "expected ` ,' or ` .. .' before ' & &' token"