gpt4 book ai didi

c++ - 未知覆盖说明符 + 缺少类型说明符

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:24 27 4
gpt4 key购买 nike

我使用的是 Visual Studio 2015 Update 2。我有两个名为 Error.h 和 Game.h 的 header 。

错误.h:

#ifndef _Error_H
#define _Error_H

#include "Main.h"
#include "Core.h"
#include <Log.h>
#include <CWindows.h>

// ErrorIDs
enum
{
ErrUnknownID = 0,
blah,
blah2,
blah3
};

struct ErrInfo
{
unsigned int eiID;
String strCaption; // String is another class which implemented from std::string which works fine!
String strText;
bool bFixable = false;
};

// Static errors
extern ErrInfo WinNotSupported;
// blah blah

class Error
{

public:
void Initialize();
bool ShowError(ErrInfo ErrorInfo);
BOOL FixError(unsigned int uiErrorID);

// -----------------------------------------
// --------------- Singleton ---------------
// -----------------------------------------
public:
static Error& Instance()
{
static Error instance;
return instance;
}

static Error *InstancePtr()
{
return &Instance();
}
private:
Error()
{

}

public:
Error(Error const&) = delete;
void operator=(Error const&) = delete;
};

#endif // !_Error_H

和Game.h:

#ifndef _Game_H
#define _Game_H

#include "Main.h"
#include "Error.h"
#include "Core.h"
#include <CWindows.h>
#include <AFile.h>

struct missingfileSt
{
String strFileURL;
String strDLFileName;
String strFileName;
String strChecksum;
long long llSize;
ErrInfo errError; // Many errors here <-
};

struct deletablefileSt
{
String strFileName;
ErrInfo errError; // Many errors here too
};

#define siMissingFiles 7
#define siDeletableFiles 5

class Game
{
public:

void ValidateFiles();
DWORD dwGamePID;
missingfileSt mfMissingFiles[siMissingFiles];
deletablefileSt dfDeletableFiles[siDeletableFiles];

// -----------------------------------------
// --------------- Singleton ---------------
// -----------------------------------------
public:
static Game& Instance()
{
static Game instance;
return instance;
}

static Game *InstancePtr()
{
return &Instance();
}
private:
Game()
{
dwGamePID = 0;
}

public:
Game(Game const&) = delete;
void operator=(Game const&) = delete;
};

#endif // !_Game_H

现在,当我编译时,我从 Game.h 中得到很多错误,所有错误都是:

Error C3646 'errError': unknown override specifier
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int

我真的很困惑,为什么会出错!?另外我必须说,在 header Core.h 中,它将再次包含 Error.h,但这一定不是问题!

最佳答案

对于所有 C++ 新手或那些被迫理解(非常)糟糕的 C++ 编译器消息的人来说,已经是一个老问题了,但缺少有用的答案。

如果您收到“缺少类型说明符”、“未知覆盖”、“未定义的类型/类”、“语法错误:(”(对于开始的函数参数列表),尽管您包含了正确的头文件那么它表明在您的包含层次结构中有一些循环引用。如果您有前向声明并且类型仍然是“未知”,这也是正确的。

C++ 中旧的包含系统的唯一解决方案是避免 #include 之间的循环引用。它是通过将 #include 从头文件 A.h 移动到 A.cpp 并通过转发声明 A.h 中的类型(或方法)。如果您不将 #include 移动到 A.cpp,尽管有前向声明,它仍然会失败。

A.hB.h 中的循环包含,因为 B.h 已经被 A.h 包含了。而不是

#include "A.h"

class B {
A a;
}

你可以写

class A;

class B {
A a;
}

并在您的 CPP 文件中包含 A.h

如果您只在 CPP 文件中定义方法,则可以避免方法前向声明的需要。

关于c++ - 未知覆盖说明符 + 缺少类型说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39074532/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com