这个应用程序布局有什么问题?

时间:2014-01-01 09:45:15

标签: c++ layout header-files

当前的节目布局。左操作数包括右操作数。

source.cpp
    app.hpp // Also includes SFML libraries with sf namespace
        game.hpp
            ball.hpp
            brick.hpp
            plate.hpp

ball类(ball.cpp)的实现引发了很多错误“ sf没有命名类型”。

source.cpp

#include "app.hpp"
int main () {
    App app(640, 480, "Arkanoid");
    while (app.getWindow()->isOpen()) app.run();
    return 0; }

app.hpp

#ifndef ArkanoidApp
#define ArkanoidApp
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "game.hpp"
// code
#endif

game.hpp

#ifndef ArkanoidGame
#define ArkanoidGame
#include "ball.hpp"
#include "brick.hpp"
#include "paddle.hpp"
// code
#endif

ball.hpp

#ifndef ArkanoidBall
#define ArkanoidBall
class Ball
{
    public:
             Ball(void);
        void draw(void);
    public: // Setters & getters
    private: // Variables
        sf::CircleShape circle; // sf is not a class type
        sf::Vector2i position;  // sf is not a class type
        sf::Vector2f direction; // sf is not a class type
    private: // Constants
        int RADIUS   = 8;
        int VELOCITY = 6;
};
#endif

1 个答案:

答案 0 :(得分:0)

如果您的app.hpp包含sf,当然ball.cpp不会知道它并抛出错误,您还需要在ball.cpp内包含sf。

要避免多个定义,请在头文件中使用#pragma once

除此之外,目前还不清楚你要做什么以及为什么要这样做,如果你达到了文件应该包含在一起的地步,这不是一个非常好的设计,应该避免,最好的设计就是一棵树。

修改

现在你可以在每个需要它的标题中包含库(app,ball ...)。 但你可以尝试更复杂的东西,如MVC。由于它是一个图形库,您可以创建一个View并在那里编写所有视图管理,比如打开绘制模型的窗口等。

你在MVC中做的是模型(游戏,球)和视图之间的完全分离,因为你可以用不同的方式显示模型,一个在2D中,另一个在3D中,每个可以使用不同的库和视图但是模特还是一样的。

有很多设计,没有正确的设计,只要它易于理解和维护/添加功能,它就是一个很好的设计。