为什么会收到“表达式必须具有类类型”错误? (C ++)

时间:2019-05-22 03:20:05

标签: c++

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,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' );
    }```

1 个答案:

答案 0 :(得分:1)

在此代码中

    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],然后可以看到两者都犯了相同的错误,因此现在您尝试访问的数组13个元素使用struct成员指针。因此你会得到同样的错误

您需要的是使用嵌套循环

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类型的对象,可以在其中使用其成员和函数(如果有的话)

我认为您可能需要详细了解多维数组和嵌套循环

请问我的英语