访问"parent"或"owner"功能C++



我有一个类,Game,它在参数中具有另一个类std::vectorCase。在这个类Case中,我有一个函数,当我们点击它时告诉我。我想在按下Case时向拥有Cases的对象Game发送信号。 在游戏中:

class Game
{
public:
Game();
void doSomething();
private:
std::vector<Case> board;
};

万一.h :

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

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

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

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

编辑:谢谢,完成了!

为此,您需要启用从Case到其所属Game的导航。 一种方法是在每种情况下保留一个引用或指向所有者的指针,并在构造时启动此引用:

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

在线演示

相关内容

  • 没有找到相关文章

最新更新