C++命名空间和语法头文件错误
C++ Namespace and Syntax Header File Errors
我在头文件中遇到了常见的错误,如下所示。
Error 54 error C3083: 'Resources': the symbol to the left of a '::' must be a type e:usersnkosidocumentsvisual studio 2010projectsdirectx gamesdirect2ddx2dhelperdx2dhelpersprite.h 28 1 DX2DHelper
Error 55 error C2039: 'DX2DImage' : is not a member of 'DX2DHelper' e:usersnkosidocumentsvisual studio 2010projectsdirectx gamesdirect2ddx2dhelperdx2dhelpersprite.h 28 1 DX2DHelper
Error 56 error C2061: syntax error : identifier 'DX2DImage' e:usersnkosidocumentsvisual studio 2010projectsdirectx gamesdirect2ddx2dhelperdx2dhelpersprite.h 28 1 DX2DHelper
Error 57 error C3083: 'Resources': the symbol to the left of a '::' must be a type e:usersnkosidocumentsvisual studio 2010projectsdirectx gamesdirect2ddx2dhelperdx2dhelpersprite.h 32 1 DX2DHelper
Error 58 error C2039: 'DX2DImage' : is not a member of 'DX2DHelper' e:usersnkosidocumentsvisual studio 2010projectsdirectx gamesdirect2ddx2dhelperdx2dhelpersprite.h 32 1 DX2DHelper
Error 59 error C2143: syntax error : missing ';' before '*' e:usersnkosidocumentsvisual studio 2010projectsdirectx gamesdirect2ddx2dhelperdx2dhelpersprite.h 32 1 DX2DHelper
Error 60 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int e:usersnkosidocumentsvisual studio 2010projectsdirectx gamesdirect2ddx2dhelperdx2dhelpersprite.h 32 1 DX2DHelper
Error 61 error C2061: syntax error : identifier 'GameBase' e:usersnkosidocumentsvisual studio 2010projectsdirectx gamesdirect2ddx2dhelperdx2dhelpersystemclass.h 30 1 DX2DHelper
然而,就我的一生而言,我不明白自己做错了什么。我知道我可能漏掉了一个分号什么的,但我真的想不通。下面是所有的头文件。
DX2DHelper.h
#include "targetver.h"
#define WIN32_LEAN_AND_MEANheaders
// Windows Header Files:
#include <windows.h>
#include <iostream>
#include <D2D1.h>
#include <D2D1Helper.h>
#include <wincodec.h>
#include <D2DBaseTypes.h>
#include <D2Derr.h>
#define DLEX __declspec(dllexport)
#include "GameBase.h"
#include "SystemClass.h"
#include "DX2DImage.h"
#include "Sprite.h"
SystemClass.h
#ifndef SYSTEMCLASS_H
#define SYSTEMCLASS_H
#include "DX2DHelper.h"
namespace DX2DHelper
{
namespace Core
{
class SystemClass;
struct WindowOptions;
struct DLEX WindowOptions {};
class DLEX SystemClass
{
public:
bool Initialize(WindowOptions options, HINSTANCE hInst);
void Run(GameBase* game, DX2DInitOptions options);
private:
WindowOptions options;
};
}
}
#endif
DX2DImage.h
#ifndef DX2DIMAGE_H
#define DX2DIMAGE_H
#include "DX2DHelper.h"
namespace DX2DHelper
{
namespace Resources
{
class DX2DImage;
class DX2DImageLoader;
class DLEX DX2DImageLoader
{
public:
HRESULT LoadFromFile(char* filePath, DX2DImage* image);
};
class DLEX DX2DImage
{
public:
friend class DX2DImageLoader;
};
}
}
#endif
Sprite.h
#ifndef SPRITE_H
#define SPRITE_H
#include "DX2DHelper.h"
namespace DX2DHelper
{
namespace GameComponents
{
class DLEX Sprite
{
public:
void SetImage(DX2DHelper::Resources::DX2DImage* image);
private:
DX2DHelper::Resources::DX2DImage* image;
};
}
}
#endif
GameBase.h
#ifndef GAMEBASE_H
#define GAMEBASE_H
#include "DX2DHelper.h"
namespace DX2DHelper
{
namespace Core
{
class DLEX GameBase
{
public:
friend class SystemClass;
HRESULT Initialize(HINSTANCE hInst, HWND winHandle, struct DX2DInitOptions options);
};
struct DLEX DX2DInitOptions {};
}
}
#endif
如果有人能找出错误,我将不胜感激。我已经看了同样的文件将近一个小时,一个半小时了,但我就是无法修复它。
您的标头有(多个)包含循环。例如,DX2DHelper.h
包括Sprite.h
包括DX2DHelper.h
。这可能是导致您错误的原因。这段代码不是Java,也不是导入语句:#include
循环完全扼杀了编译,即使你没有收到专门说明这一点的编译错误。为你的头文件选择一个非循环顺序。
我建议DX2DHelper.h
在底部不要包含任何内容。CCD_ 6可以包括CCD_。
如果对象具有循环依赖关系(例如SystemClass
和GameBase
),则需要另一种解决方案。在不给出完整声明的情况下转发声明依赖类,例如,在SystemClass.h
中,您可能会提前添加一些内容:
namespace DX2DHelper { namespace Core { class DLEX GameBase; } }
类似地在GameBase.h
:中
namespace DX2DHelper { namespace Core { class DLEX SystemClass;} }
当不涉及循环对象依赖关系时,这甚至是一个好主意——这通常是解决您在这里遇到的头地狱类型的一种简单方法。当然,为了编译所有内容,您可能需要在相应的实现文件中#include
适当的头。但是,假设您没有#include
任何.cpp
/.cc
文件,这应该允许在没有#include
地狱的情况下编译所有内容。
相关文章:
- C++系统找不到指定的文件错误
- C++语法头文件错误
- C++生成文件错误"implicit entry/start for main executable"
- C++/生成文件错误:未定义对"main"的引用
- VS2019:资源文件错误:中性(默认)(未知子语言:0x8)
- C++程序不制作文件(错误)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- "what does ":*** [可执行文件] 错误 1 " mean ?"
- 如何修复使用VScode调试器gcc调试时的"找不到文件"错误
- 在课堂上创建了一个朋友,给出"无输入文件"错误
- Qt .exe文件错误
- c++ 添加具有写入文件错误的文本变量
- 无法转换 .CATPart 文件.错误:输入文件路径似乎包含不支持的字符
- 写入文本文件错误,QT
- C++写入文件错误
- Windows Subsystem for Linux (WSL) 下的间歇性随机"找不到文件"错误
- 犰狳读取MAT文件错误
- 无法求解FullPathForFilename:COCOS2DX中可能缺少文件错误
- C Wininet FTP列出了许多文件错误
- 生成文件错误 - 找不到文件 - *.cpp