wDeck
,在下面的代码中给我一个"expression must have a class type"
错误。我已经在大多数其他代码中阐明了 wDeck
void fillDeck(Card* wDeck, void shuffle(Card* wDeck), void deal( Card wDeck[][13]))
我不明白
我没有尝试太多,因为我只有 C++ 的基础知识
我使用 Visual Studio 2019,企业版
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <time.h>
using namespace std;
struct Card {
char *face;
char *suit;
};
void shuffle(int[][13]);
void deal(const int[][13], const char* [], const char* []);
void fillDeck(Card*, char* [], char* []);
int main() {
const char* suit[4] =
{ "Hearts", "Diamonds", "Clubs", "Spades" };
const char* face[13] =
{
"Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" };
int deck[4][13] = { 0 };
srand(time(0));
shuffle(deck);
deal(deck, face, suit);
return 0;
}
void fillDeck(Card* wDeck, char* wFace[], char* wSuit[])
{
for (int i = 0; i < 52; i++) {
wDeck[i].face = wFace[i % 13];
wDeck[i].suit = wSuit[i / 13];
}
}
void shuffle(Card* wDeck)
{
for (int i = 0; i < 52; i++) {
int j = rand() % 52;
Card temp = wDeck[i];
wDeck[i] = wDeck[j];
wDeck[j] = temp;
}
}
void deal( Card wDeck[][13])
{
for (int i = 0; i < 52; i++)
cout << setiosflags(ios::right)
<<setw(5) << wDeck[ i ].face << " of "
<<setiosflags(ios::left)
<<setw(8) << wDeck[ i ].suit
<<( ( i + 1 ) % 2 ? '\t': '\n' );
}```
最佳答案
在这段代码中
void deal( Card wDeck[][13])
{
for (int i = 0; i < 52; i++)
cout << setiosflags(ios::right)
<<setw(5) << wDeck[ i ].face << " of "
<<setiosflags(ios::left)
<<setw(8) << wDeck[ i ].suit
<<( ( i + 1 ) % 2 ? '\t': '\n' );
}
你定义
wDeck[][13]
作为多维数组
然后您尝试将其作为一维数组访问
wDeck[ i ]
它的作用如下:
在第一次迭代中,wDeck[ 0 ]
的结果是另一个数组,在您的例子中它有 13 个元素
wDeck[i] 不是类或结构,它是一个数组,因此它没有成员函数。
有人回答了here
在您的代码中,您可以将 arrayTest
替换为 here在你的代码中使用 wDeck[i]
,然后你可以看到你们是如何犯同样的错误的,所以现在你正在尝试使用 struct 成员指针访问一个包含 13 个元素的数组。因此你会得到同样的错误
你需要的是使用嵌套循环
for (int i = 0; i < 4; i++)
{
for (int j =0 ; j<13 ;j++)
{
cout << setiosflags(ios::right)
<<setw(5) << wDeck[ i ][j].face << " of "
<<setiosflags(ios::left)
<<setw(8) << wDeck[ i ][j].suit
<<( ( i + 1 ) % 2 ? '\t': '\n' );
}
}
这段代码所做的是,它遍历数组 wDeck[] 的第一层(我想你在阅读代码后将这个数组定义为 4),结果将是第二层的数组(我可以看到你将它定义为 13),然后你遍历数组的第二层,然后你得到一个 Card 类型的对象,你可以在其中使用它的成员和函数,如果它有的话
我认为你可能需要更多地了解多维数组和嵌套循环
请原谅我的英语
关于c++ - 为什么我收到 "Expression must have a class type"错误? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56248853/