参数'1'无法将'WonderT'转换为'WonderT *'

时间:2017-09-19 20:55:15

标签: c++ arrays function

我是这个网站的新手,但我无法在这里找到解决我问题的解决方案。我试图和我的朋友一起参与游戏,我想知道是否有人可以帮助我们朝着正确的方向前进。当我们尝试编译&#34时,我们收到此错误消息;无法将'WonderT'转换为'WonderT *'以用于参数'1'和#34;。如果有人可以提供帮助,我真的很感激。

void WonderSelect(Player&, int, WonderT[]);

WonderT wonders[MAX_WONDER_COUNT];
Player player1, player2;


void WonderSelect(Player& players, int wonderCount, WonderT wonders[]) {
  players.SetPick(rand() % wonderCount);
  PrintWonders(wonders[players.GetPick()]);
  return;
}

编辑:这是我的PrintWonders功能

void PrintWonders(WonderT allWonders[], int count) {
    int i;

    for(i=0;i<count;i++) {
      cout << "Wonder " <<  i << endl;
      PrintWonder(allWonders[i]);
    }
    return;
}

1 个答案:

答案 0 :(得分:1)

PrintWonders()(注意复数)需要一组WonderT个对象。它将遍历数组,将每个对象传递给PrintWonder()(注意单数)。

您的代码失败是因为您从数组中选择一个随机对象并将其传递给PrintWonders()(复数),而应将其传递给PrintWonder()(单数):

void WonderSelect(Player& players, int wonderCount, WonderT wonders[]) {
    players.SetPick(rand() % wonderCount);
    // PrintWonders(wonders[players.GetPick()]); // <-- ERROR!
    PrintWonder(wonders[players.GetPick()]);     // <-- OK! 
    return;
}

如果你想用一个对象作为输入来调用PrintWonders()(复数),请改为调用它:

void WonderSelect(Player& players, int wonderCount, WonderT wonders[]) {
    players.SetPick(rand() % wonderCount);
    PrintWonders(&wonders[players.GetPick()], 1); // <-- OK!
    return;
}