C++;包含循环 我是游戏开发中的NoOB,我想用C++做一个简单的平台游戏。问题是当我创建两个类(游戏和图形)时,我不能在Graphics.h中包含Game.h,因为我已经在Game.h中包含Graphics.h。有人能帮我吗? 代码: 游戏h:

C++;包含循环 我是游戏开发中的NoOB,我想用C++做一个简单的平台游戏。问题是当我创建两个类(游戏和图形)时,我不能在Graphics.h中包含Game.h,因为我已经在Game.h中包含Graphics.h。有人能帮我吗? 代码: 游戏h:,c++,C++,图h: #pragma once #include <SDL.h> struct Graphics { SDL_Surface* screen; void init(); void rect(SDL_Rect rect, Uint32 color); void rect(SDL_Rect rect, int r, int g, int b); void rect(int x, int y, int w, int h, Uint32 co

图h:

#pragma once

#include <SDL.h>

struct Graphics {
    SDL_Surface* screen;

    void init();

    void rect(SDL_Rect rect, Uint32 color);
    void rect(SDL_Rect rect, int r, int g, int b);
    void rect(int x, int y, int w, int h, Uint32 color);
    void rect(int x, int y, int w, int h, int r, int g, int b);

    void render(Game* game);
};
#pragma一次
#包括
结构图形{
SDL_表面*屏幕;
void init();
void rect(SDL_rect,Uint32颜色);
void rect(SDL_rect rect,int r,int g,int b);
void rect(int x、int y、int w、int h、Uint32颜色);
void rect(int x,int y,int w,int h,int r,int g,int b);
无效渲染(游戏*游戏);
};

您可以在此处使用转发声明:

#ifndef GRAPHICS_H_ // portable include guards
#define GRAPHICS_H_

#include <SDL.h>

class Game; // forward declaration. Exactly the same as struct Game.

struct Graphics 
{
  // as before
};

#endif
#ifndef图形H//便携式防护装置
#定义图形_
#包括
班级游戏;//远期申报。与struct游戏完全相同。
结构图形
{
//一如既往
};
#恩迪夫
因为
图形
不需要定义
游戏
。您很可能需要将
Game.h
包含在
Graphics
的实现文件中


请参阅相关帖子:

您可以在此处使用转发声明:

#ifndef GRAPHICS_H_ // portable include guards
#define GRAPHICS_H_

#include <SDL.h>

class Game; // forward declaration. Exactly the same as struct Game.

struct Graphics 
{
  // as before
};

#endif
#ifndef图形H//便携式防护装置
#定义图形_
#包括
班级游戏;//远期申报。与struct游戏完全相同。
结构图形
{
//一如既往
};
#恩迪夫
因为
图形
不需要定义
游戏
。您很可能需要将
Game.h
包含在
Graphics
的实现文件中


请参阅相关帖子:

您可以使用一个标题合并
Game.h
Graphic.h
;没有理由每个类有一个头


如果使用(然后使用
g++-Wall-g
编译),整个项目只有一个标题的优点是能够。另请参见。

您可以使用一个标题合并
Game.h
Graphic.h
;没有理由每个类有一个头


如果使用(然后使用
g++-Wall-g
编译),整个项目只有一个标题的优点是能够。另请参见。

我认为最好是更加一致,并使用
struct游戏@KennyTM可能。这不是我担心的那种事。我添加了一条评论。吹毛求疵:修复带有下划线的all caps guard宏不是很好吗?那应该是
GRAPHICS\u H
而不是IIRC.@H2CO3我来看看。我认为后期修复是可以的,双下划线坏,前导下划线后跟大写字母坏。但我可能会漏掉一个。@juanchopanza是的,双下划线绝对是一个大禁忌:)我认为最好更一致,使用
struct游戏@KennyTM可能。这不是我担心的那种事。我添加了一条评论。吹毛求疵:修复带有下划线的all caps guard宏不是很好吗?那应该是
GRAPHICS\u H
而不是IIRC.@H2CO3我来看看。我认为后期修复是可以的,双下划线坏,前导下划线后跟大写字母坏。但我可能错过了一个。@juanchopanza是的,双下划线绝对是一个大禁忌:)尽可能避免在.h文件中添加#includes,将最常用的头includes放在一个公共的.h文件中(我称之为我的PCH.h),并在每个cpp文件的开头包含该头,然后从IDE或make脚本中打开预编译头。这可能看起来很复杂,但从长远来看,它会为您节省很多麻烦没有理由真正让每个类都有一个头小心这个常见的头概念:根据我的经验,它会迅速失控,最终导致不必要的依赖性负载。一般来说,包括您需要的,并且只包括您需要的。尽可能避免在.h文件中添加#includes,将最常用的头includes放在一个通用的.h文件中(我称之为mine PCH.h),并在每个cpp文件的开头包含该头,并从IDE或make脚本中打开预编译头。这可能看起来很复杂,但从长远来看,它会为您节省很多麻烦没有理由真正让每个类都有一个头小心这个常见的头概念:根据我的经验,它会迅速失控,最终导致不必要的依赖性负载。一般来说,包括你需要的,并且只包括你需要的。