c++ - 为什么我收到“表达式必须具有类类型”错误?(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,企业版
#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] 不是类或结构,它是一个数组,因此它没有成员函数。
它在您的代码中得到了回答
,您可以在代码中替换这里,然后 您可以看到你们俩是如何犯同样的错误的,所以现在您正在尝试使用 struct 成员指针访问一个包含 13 个元素的数组。因此你得到同样的错误arrayTest
wDeck[i]
你需要的是使用嵌套循环
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 类型的对象,您可以在其中使用它的成员和函数(如果有)
我认为您可能需要了解有关多维数组和嵌套循环的更多信息
原谅我的英语
推荐阅读
- javascript - 如何使用 cy.clock() 获取当前日期
- python - 关闭 pygobject 中的所有现有窗口
- javascript - 自定义 Amazon 的 Crowd HTML 元素
- chart.js - 在 Chart.js 中使用一系列纪元时间戳按月分组
- javascript - ReferenceError: document is not defined exited with code=1 in 0.107 seconds
- redux - 在 Nextjs 中使用 Redux 的正确方法?
- c++ - 在头文件中引用 ADT
- css - 如何使用引导网格在 ipad 中仅显示两列
- docker - Github Actions:如何在 build-push-action 构建的 docker 镜像中运行容器化测试,而不会使执行时间加倍
- flutter - Flutter GeoFire SetLocation 挂起并且不工作