我有一个班级,Game
,在论证中有另一个类的std::vector
,Case
。在这个类Case
中,我有一个函数告诉我什么时候点击它。当我按下Game
时,我想向我的对象Cases
发送信号,Case
拥有class Game
{
public:
Game();
void doSomething();
private:
std::vector<Case> board;
};
。在game.h中:
class Case
{
public:
Case(Game &g);
void functionWhichIsCalledWhenCaseIsPressed();
private:
Game game;
};
在case.h中:
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
但我有一个错误:
Case
编辑:谢谢,它完成了!
为此,您需要启用从Game
到其拥有的class Game;
class Case
{
public:
Case(Game& x);
void functionWhichIsCalledWhenCaseIsPressed();
private:
Game &game; // <<<<-------------- reference to owner
};
的导航。一种方法是在每个Case中保留一个引用或指向所有者的指针,并在构造时初始化此引用:
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; }
这要求游戏初始化棋盘并为构造函数提供正确的参数:
Online demo
qazxswpoi