将对象向量的指针作为参数传递,但差异更大

Passing pointer of vector of objects as arguments but a lot more different

本文关键字:参数传递 向量 对象 指针      更新时间:2023-10-16

这个问题确实看起来像是旧问题的复制和粘贴(有点像),但我向你保证,情况要不同得多,而且很难解释,所以在你谋杀我微不足道的声誉之前,请听我说出来。

我在将包含对象的向量放入函数参数中,然后扫描它们并将特定对象放入另一个函数的参数中时遇到问题,然后该参数将使用该特定对象的所有值。

例如,如果存在玩家职业和敌人职业:

class player{
public:
int id;
string name;
};
class enemy{
public:
int eid;
string name;
};

这些类的一些对象存储在它们自己的向量中:

player example;
example.id = 1;
example.name = "example";
enemy badEnemy;
badEnemy.eid = 1;
badEnemy.name = "badEnemy";
vector<player> allPlayers;
vector<enemy> allEnemys; //I know the spellings wrong but am to reluctant to change it
allPlayers.push_back(example);
allEnemys.push_back(badEnemy);

然后有一个函数可以打印出对象名称:

int fightEnemy(player player, enemy enemy) {
cout << player.name << endl;
cout << enemy.name << endl;
return 0;
}

之后,将有一个函数扫描矢量中的特定对象并将它们插入到fightEnemy函数中

int enemyComboCheck(int id1, int id2, vector<Player>* allPlayers, vector<enemy>* allEnemys){
int iteratorForPlayer = 0;
id1 -= 1;
id2 -= 1;
for(int i = 0; i < 18; ++i){
if(id1 == allPayers[iteratorForPlayer].id && id2 == allEnemys[i].id) fightEnemy(allPlayers[iteratorForPlayer], allEnemys[i]);
//how do I pass the scanned object into the other function
}
return 0;
}

我想我的主要问题是如何通过向量将扫描的对象传递到另一个函数中?我是否必须在另一个函数中使用向量?

很抱歉所有错误的格式,无论如何谢谢!

你传递它的方式与在if语句中引用它们的方式完全相同。

fightEnemy(allPlayers[iteratorForPlayer], allEnemies[i]);

并修复拼写。 这就是全局查找和替换的目的。

我建议更改fightEnemy的签名以获取引用,这样您就不必复制对象,并且如果需要,您可以更改命中点之类的内容。 这不会改变你称呼它的方式:

int fightEnemy(player &player, enemy &enemy)