【问题标题】:Passing an array to a function c++将数组传递给函数c ++
【发布时间】:2015-04-24 15:18:13
【问题描述】:

我正在尝试将我的数组传递给一个名为 printDeck 的函数,并且它工作得非常好,直到我将一些东西添加到我的打印函数中。这是我的声明和对 printDeck 的调用,以及对其他一切正常的函数的调用:

void fillDeck(Card *deck);
void printDeck(Card deck[]);
void printDeck(Card p1[]);
void printDeck(Card p2[]);
void shuffleDeck(Card *deck);

int main (int argc, char *argv[]){
   Card deck[52];
   Card p1[26];
   Card p2[26];
   fillDeck(deck);
   shuffleDeck(deck);
   printDeck(deck); //this is where the problem is happening
   printDeck(p1);  //and here
   printDeck(p2);  //and here

}

对于所有三个 printDeck 函数调用,我得到的错误是“未定义对 `printDeck(Card*)' 的引用”。我觉得我只是犯了一个愚蠢的错误,真的看不到它,但对我来说一切看起来都很好?我已经查找了将数组传递给函数的语法,我认为我做得正确,但也许不是。 如果需要,这里是实际功能:

void printDeck(Card deck[], Card p1[], Card p2[]){
   for(int i = 0; i < 52; i++){
      printf("%d of %s",deck[i].number,deck[i].suit); 
      printf("\n\n"); 
      //printf("%s", deck[i].suit);
      //printf("\n%d\n\n", deck[i].number);
   }
   printf("\n\nP1's cards\n");
   for(int i = 0; i < 52; i++){
      printf("%d of %s", p1[i].number, p1[i].suit);
   }
   printf("\n\nP2's cards\n");
   for(int i = 0; i < 52; i++){
      printf("%d of %s", p2[i].number, p2[i].suit);
   }
}

感谢任何帮助!

【问题讨论】:

  • 函数为什么要声明3次?为参数赋予不同的名称并不会使其成为不同的函数。
  • 为什么函数声明的签名与定义不同?您不能通过printDeck(deck) 拨打void printDeck(Card deck[],Card p1[],Card p2[])。这实际上是你的错误。您声明该函数采用一个数组,但您从未定义它。

标签: c++ arrays function reference declaration


【解决方案1】:

这三行:

void printDeck(Card deck[]);
void printDeck(Card p1[]);
void printDeck(Card p2[]);

声明相同的函数。它们相当于说:

void printDeck(Card []);
void printDeck(Card []);
void printDeck(Card []);

如果你想在一个函数调用中打印所有的牌组,你需要将函数声明更改为:

void printDeck(Card [], Card [], Card []);

以及从以下位置更改调用行:

printDeck(deck);
printDeck(p1);
printDeck(p2);

printDeck(deck, p1, p2);

【讨论】:

    【解决方案2】:

    您已将打印甲板功能定义为:

    void printDeck(Card deck[]);
    void printDeck(Card p1[]);
    void printDeck(Card p2[]);
    

    而您将其实现为:

    void printDeck(Card deck[], Card p1[], Card p2[]){...}
    

    你真的想把它定义为:

    void printDeck(Card deck[], Card p1[], Card p2[]);
    

    并将其称为

    printDeck(deck, p1, p2);
    

    否则声明与定义不匹配。此外,同一个函数的三个声明会导致编译器尝试生成重载,但会失败,因为所有三个函数都具有相同的签名。

    【讨论】:

      猜你喜欢
      • 2018-11-14
      • 2013-06-26
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多