首页 > 解决方案 > 朋友,前向声明,C++

问题描述

所以这让我有点困惑。两者都不会在其他不完整类型等之前声明。Game之前不会去,Hero因为Hero test1Hero不会去之前Game因为friend void Game::vitals(Hero&);

这是不可能的循环依赖吗?

class Game
{
    // ...

    void vitals(Hero&);

    Hero test1;
};

class Hero : public Character
{
    // ...

public:     
    friend void Game::vitals(Hero&);
};

标签: c++friend

解决方案


所以Hero必须先去,Game因为class Game { ... Hero test1; ... };需要Hero完全定义。

friend void Game::vitals(Hero&);可以简单地返工为friend class Game;. 将一个类的一种方法作为另一个类的朋友很少使用,并且没有多大意义,因为任何形式的友谊都假定两段代码相互“信任”。所以你不妨把全班都交朋友。

另一种工作是重新设计设计,这样就不需要友谊了。这可能是您设计中的一个弱点。


推荐阅读