【发布时间】:2020-02-04 18:20:35
【问题描述】:
我在 c++ sfml 中得到了一个蛇的代码。我在这里有 2 个对象 Snake 和 Food,还有一个 main(),其中包含 Windows 的 sfml 设置。我会简单地创建 3 个从 main 调用的对象,但它会导致循环引用并且无法编译。
我想要的是(或接近以下想法的东西)。
int main
{
Food food(window);
Snake snake(window, food);
Window window(snake, food);
window.start();
}
蛇气方法draw需要引用它的窗口(绘制需要窗口句柄),更新也需要窗口(窗口大小)
食物也需要那些出于密切原因(需要绘制和窗口)
窗口反过来有它的窗口循环,它需要从那里调用蛇和食物的更新和绘制
//编辑
有人要求定义,但定义很简单
class Snake;
class Food;
class Window
{
public:
Window::Window(Snake& s, Food& f): snake(s), food(f)
{
}
private:
Snake& snake;
Food& food;
}
class Snake
{
public:
Snake::Snake(Window& w, Food& f): window(w), food(f)
{
}
private:
Window& window;
Food& food;
}
class Food
{
public:
Snake::Snake(Window& w): window(w)
{
}
private:
Window& window;
}
【问题讨论】:
-
使用某种引用或指针。不要直接包含对象,你的代码会编译得很好。可能需要额外的所有权管理,但现在使用
shared_ptr很容易。 -
如果相关的话,我所说的答案在哪里?
-
不,它似乎是关于标题的,我没有得到标题的问题,但有参考
-
请发minimal reproducible example,我们可以发表评论。
标签: c++ oop circular-dependency