我在编码设计模式观察器时遇到了SIGSEGV问题。 我有Subject类,Enemy类(这是具体的Subject),RobotShooter和RobotFighter,它们是两个特定的敌人。 我有Observer类,Achievement类(这是具体的Observer),DemolisherAchievement和SniperAchievement,它们是特定的成就。
问题发生在新敌人注册成就时,似乎甚至无法输入registerObserver方法。
主要:
std::shared_ptr<DemolisherAchievement> newDem = std::dynamic_pointer_cast<DemolisherAchievement>(dem);
std::shared_ptr<Enemy> enemy = enemyFactory.createEnemy(Enemy::SubType::robotRed, textures,
window->getSize());
int x,y;
enemyArray[i]->registerObserver(dem);
在敌人中。h
void registerObserver(std::shared_ptr<Observer> o) override; //inherited from Subject class
std::vector<std::shared_ptr<Observer>> observers; //vector of observers
在Enemy.cpp中
void Enemy::registerObserver(std::shared_ptr<Observer> o) {
observers.emplace_back(o);
}
我的shared_ptr始终为NULL,成就定义后对我来说似乎很奇怪