如何编译使用循环引用的代码?



我在c ++ sfml中得到了一个蛇的代码。我在这里得到了 2 个对象 蛇和食物,我还有一个包含窗口 sfml 设置的main()。我只会制作 3 个从 main 调用的对象,但它会导致循环引用并且无法编译。

我想要的是(或接近下面的想法(。

int main
{ 
Food food(window); 
Snake snake(window, food); 
Window window(snake, food); 
window.start(); 
}

蛇气法绘制需要参考其窗口(用于绘图,因为绘图需要窗口手柄(,并且更新 whuch 也需要窗口(对于窗口大小(

食物也需要那些接近的原因(需要画和窗苏兹(

窗口反过来有它的窗口循环,它需要从那里调用蛇和食物的更新和绘制

//编辑

有人要求定义,但定义是坚定的

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;
}

如何编译具有循环引用的 C++ 代码?

不能编译具有循环引用C++代码。

如果你有一个循环引用,解决方案是打破循环,使依赖关系图变成有向无环图。

如果间接C++除了引用之外,还有另一种形式:指针。由于指针可以默认初始化并在以后分配,因此它们可以形成循环结构。

可以破坏循环初始化的模式是两阶段初始化:首先创建与Window无关的FoodSnake,只有在创建Window之后,调用执行第二阶段初始化的函数。两阶段初始化不能与引用一起使用,但可以与指针一起使用。

最新更新