C++ 由类的指针组成的向量
假设我有一个向量,由类敌人的指针组成:C++ 由类的指针组成的向量,c++,pointers,vector,sdl-2,C++,Pointers,Vector,Sdl 2,假设我有一个向量,由类敌人的指针组成: vector<Enemy*> enemyVect; 您的问题在这一部分: int random = rand() % enemyTypesVect.size(); Enemy* e1 = enemyTypesVect[random]; enemyVect.push_back(e1); 你有一个敌人类型的数组,在你的情况下只有一个对象。保存指向该对象的指针(e1),然后将其添加到向量中 问题是e1每次都指向同一个副本。设置x/y坐标的
vector<Enemy*> enemyVect;
您的问题在这一部分:
int random = rand() % enemyTypesVect.size();
Enemy* e1 = enemyTypesVect[random];
enemyVect.push_back(e1);
你有一个敌人类型的数组,在你的情况下只有一个对象。保存指向该对象的指针(e1
),然后将其添加到向量中
问题是e1
每次都指向同一个副本。设置x/y坐标的函数实际上在每次迭代中为同一对象设置x/y坐标
您可以通过打印分配给e1
的指针来验证这一点:
printf("e1 is %p\n", e1);
你会发现它对每个敌人都有相同的价值 解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,你应该[编辑]你的问题,包括一个重现你的问题的例子,以及你在调试器中所做的观察。想想你为每种敌人类型创建了多少个对象。可能与你的问题无关,但你应该使用
std::vector enemyVect代码>或std::vector
而不是原始指针。是的,我现在明白了。那么,如何将敌人添加到enemyVect中,而不将它们作为指向同一副本的指针呢?您应该使用a或设计模式。敌人类型向量可以被一个工厂
对象替换,该对象将为您实例化新对象,而不是返回现有对象。
for (int i = 0; i < enemyVect.size(); i++) {
newRect = enemyVect[i]->getRect();
newRect.y += enemyVect[i]->getSpeed();
enemyVect[i]->setRect(newRect);
enemyVect[i]->draw();
}
void Enemy::draw() {
SDL_RenderCopy(sys.getRen(), getTexture(), NULL, &getRect());
}
int random = rand() % enemyTypesVect.size();
Enemy* e1 = enemyTypesVect[random];
enemyVect.push_back(e1);
printf("e1 is %p\n", e1);