我只是从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_;
    };

我唯一不了解的部分如下:
    class Painter;
    class Ball;

两个“class [name];”是什么意思?在源代码中,Painter.cpp,Painter.hpp,Ball,hpp,Ball.cpp有所不同。

这意味着某种包含?

最佳答案

这些是forward declarations,可以用来说一个名称存在,但是目前还没有名称的定义,但是我想使用这个名称。

请注意,在该类中,它仅使用指向PainterBall的指针和引用。使用前向声明时,这是完全可以的,但是如果您输入的代码依赖于PainterBall类的内部知识(例如,调用函数或使用该类的成员变量),则必须包括实际的类声明。

例如,请注意 header #includebrick.hpp header 的关系,因为该类具有std::vector<Brick>容器,该容器存储Brick对象的副本,并且需要知道sizeof(Brick)。 header 还使用Brick::WIDTHBrick::HEIGHT

前向声明的另一个常见用例是修复circular dependency problem

关于c++ - 单个.hpp文件中有多个类名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5146314/

10-11 14:55