为什么我会收到"Expression must have a class type"错误?(C++)

Why am I receiving "Expression must have a class type" error? (C++)

本文关键字:错误 class type C++ have must Expression 为什么      更新时间:2023-10-16

wDeck,在下面的代码中给我一个 "expression must have a class type" 错误。我已经在大多数其他代码void fillDeck(Card* wDeck, void shuffle(Card* wDeck), void deal( Card wDeck[][13]))

中阐明了wDeck

我不明白

我没有尝试过太多,因为我只有C 的基本知识

我使用Visual Studio 2019,Enterprise

#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]作为多维数组然后,您尝试以1个维数组

访问它
 wDeck[ i ]

这做的是以下内容:

在第一次迭代中,wDeck[ 0 ]的结果是另一个数组,在您的情况下,它具有13个元素wdeck [i]不是类或结构,而是数组,因此它没有成员函数。

在这里回答在代码中,您可以在代码中用wDeck[i]在此处替换arrayTest,然后您可以看到俩都犯了相同的错误,因此现在您尝试使用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' );
}
}

该代码的作用是,它在数组的第一层上迭代[](我认为您在读取代码后将该数组定义为4(,结果将是第二层的数组(我可以看到您将其定义为13(,然后在数组的第二层上迭代,然后获得类型卡的对象,如果它具有任何

,则可以在其中使用其成员和功能

我认为您需要更多地了解多维阵列和嵌套循环

对不起我的英语

相关文章: