将对象向量的指针作为参数传递,但有很多不同
Posted
技术标签:
【中文标题】将对象向量的指针作为参数传递,但有很多不同【英文标题】:Passing pointer of vector of objects as arguments but a lot more different 【发布时间】:2017-05-19 05:49:39 【问题描述】:这个问题看起来确实像一个旧问题的复制和粘贴(它有点像),但我向你保证,情况会大不相同,而且很难解释,所以在你谋杀我微不足道的名声之前,请听我说完.
我在将保存对象的向量放入函数参数时遇到问题,然后扫描它们并将特定对象放入另一个函数的参数中,然后该函数的参数将使用该特定对象的所有值。
例如,如果有玩家类和敌人类:
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;
我想我的主要问题是如何通过向量将扫描的对象传递给另一个函数?我是否必须在其他函数中使用向量?
抱歉所有格式错误,无论如何谢谢!
【问题讨论】:
为什么循环中有 18 个? @Donnie 这是我遇到问题的程序,有 18 个敌人和 5 个玩家 【参考方案1】:传递它的方式与在 if
语句中引用它们的方式完全相同。
fightEnemy(allPlayers[iteratorForPlayer], allEnemies[i]);
并修正拼写。这就是全局查找和替换的用途。
我建议更改fightEnemy
的签名以获取引用,这样您就不必复制对象,并且如果需要,您可以更改诸如生命值之类的内容。这不会改变你的称呼方式:
int fightEnemy(player &player, enemy &enemy)
【讨论】:
我添加了所有内容,没有任何错误,但现在的问题是,fightEnemy 不会出现在控制台中。以上是关于将对象向量的指针作为参数传递,但有很多不同的主要内容,如果未能解决你的问题,请参考以下文章