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