将对象向量的指针作为参数传递,但有很多不同

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 &amp;player, enemy &amp;enemy)

【讨论】:

我添加了所有内容,没有任何错误,但现在的问题是,fightEnemy 不会出现在控制台中。

以上是关于将对象向量的指针作为参数传递,但有很多不同的主要内容,如果未能解决你的问题,请参考以下文章

通过将指针作为参数传递来删除对象

如何将向量传递给函数参数(我需要指针吗?)

如何将向量作为参数传递给另一个向量?

什么是函数的参数传递呢??它有几种呢?

将函数作为参数传递。 C++

如何将向量传递给函数?