我有一个类,Game
,它在参数中具有另一个类std::vector
,Case
。在这个类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; }
在线演示