将数组传递给函数 C++
Passing an array to a function c++
我正在尝试将我的数组传递给一个名为 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 函数调用,我得到的错误是 "undefined reference to `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);
}
}
感谢任何帮助!
您已将 print deck 函数定义为:
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);
否则声明与定义不符。此外,同一个函数的三个声明将导致编译器尝试生成重载,但它会失败,因为所有三个函数具有相同的签名。
这三行:
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);
我正在尝试将我的数组传递给一个名为 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 函数调用,我得到的错误是 "undefined reference to `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);
}
}
感谢任何帮助!
您已将 print deck 函数定义为:
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);
否则声明与定义不符。此外,同一个函数的三个声明将导致编译器尝试生成重载,但它会失败,因为所有三个函数具有相同的签名。
这三行:
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);