0

我有一个类,Game,它的参数 astd::vector是另一个类的,Case。在这个类Case中,我有一个函数告诉我什么时候点击它。我想在按下a 时向我的对象发送一个信号Game,该对象拥有。在 game.h 中:CasesCase

class Game
{
public:
    Game();
    void doSomething();

private:
    std::vector<Case> board;
};

在 case.h 中:

class Case
{
    public:
        Case(Game &g);
        void functionWhichIsCalledWhenCaseIsPressed();
    private:
        Game game;
};

所以,当functionWhichIsCalledWhenCaseIsPressed()被调用时,我想调用函数doSomething()。编辑 :

我试过了,但我还需要从向量中创建一个案例......实际上,我的Case c;Game.h 中有一个......而且我无法初始化它......我试过c = Game(*this);但我有一个错误:

error: object of type 'Case' cannot be assigned because its copy assignment operator is implicitly delete

编辑:谢谢,完成了!

4

1 回答 1

1

为此,您需要启用从 aCase到其拥有的导航Game。一种方法是在每个 Case 中保留一个引用或指向所有者的指针,并在构造时初始化此引用:

class Game; 
class Case
{
    public:
        Case(Game& x);
        void functionWhichIsCalledWhenCaseIsPressed();
    private: 
        Game &game;  // <<<<-------------- reference to owner
};

有了这些先决条件,您可以轻松调用父函数:

Case::Case(Game& x) : game(x){
}
void Case::functionWhichIsCalledWhenCaseIsPressed() {
    cout<<"Clicked"<<endl; 
    game.doSomething();    //<<<===== invoke the function of the owner
}

这要求游戏初始化棋盘并向构造函数提供正确的参数:

Game::Game() {
    for (int i=0; i<10; i++)
        board.push_back(Case(*this));
}
void Game::doSomething() { cout<<"click on game"<<endl; }

在线演示

于 2019-03-19T21:20:26.870 回答