单个.hpp文件中的多个类名

and*_*r01 1 c++ forward-declaration

我刚刚开始使用C++,所以我正在寻找一些代码来学习.我在Breakout游戏中找到了这段代码片段.

    #pragma once
    #include "force.hpp"
    #include "brick.hpp"
    #include <vector>

    class Painter;
    class Ball;

    class Wall
    {
    public:
      enum { ROWS_COUNT = 16,
         COLS_COUNT = 8 * 3 };
      enum { WIDTH = ROWS_COUNT * Brick::WIDTH,
         HEIGHT = COLS_COUNT * Brick::HEIGHT };
      Wall();
      void draw(Painter &) const;
      Force tick(const Ball &);
    public:
      typedef std::vector<Brick> Bricks;
      Bricks bricks_;
    };
Run Code Online (Sandbox Code Playgroud)

我不理解的唯一部分如下:

    class Painter;
    class Ball;
Run Code Online (Sandbox Code Playgroud)

两个"班级[名字];"是什么意思?在源代码中有不同的Painter.cpp,Painter.hpp,Ball,hpp,Ball.cpp.

这意味着某种包括?

wkl*_*wkl 9

这些是前向声明,可以用来表示名称存在,但目前还没有对它的定义,但我想使用该名称.

需要注意的是在课堂上,它仅使用指针和引用PainterBall.当使用前向声明时,这是完全正常的,但是如果你输入的代码依赖于关于PainterBall类的内部的知识(比如调用函数或使用类的成员变量),那么你必须包含实际的类声明.

例如,注意一下头#includeS上的brick.hpp头,因为班里有一个std::vector<Brick>容器,存储拷贝Brick的对象,并需要知道sizeof(Brick).标题也使用Brick::WIDTHBrick::HEIGHT.

前向声明的另一个常见用例是修复循环依赖问题.