为什么我会收到"Expression must have a class type"错误?(C++)
Why am I receiving "Expression must have a class type" error? (C++)
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(,然后在数组的第二层上迭代,然后获得类型卡的对象,如果它具有任何
,则可以在其中使用其成员和功能我认为您需要更多地了解多维阵列和嵌套循环
对不起我的英语
相关文章:
- 错误:"Left of getValue must have class/struct/union"
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- unordered_set .find 方法无法编译的 C++ "expression must have class type"错误
- C++错误:"class name"之前的预期类型说明符
- 错误:'class std::unique_ptr<std::set<long unsigned int> >'没有名为 'size' 的成员
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 获取生成错误:错误 C2011:'ProfileSettings':'class'类型重定义
- 错误 LNK2001:未解析的外部符号"private: static class Game Game::game_"
- C++编译错误:重新定义'class::class'
- VS2017模板专用化错误无法从'Class *(__cdecl *)(Args...)'转换为'Class *(__cdecl *)(Args...)'
- 在 C++ 中对"Class::function()"错误的未定义引用 [CLion IDE]
- 调用 list.size() 方法给出错误"expression must have class type"
- C++ 中的"this declaration has no storage class or type specifier"错误
- 将数据添加到 CArray 会产生错误"cannot access private member declared in class 'CObject'"
- 如何修复派生类给出错误'declaration has no storage class or type specifier'?
- 为什么我会收到"Expression must have a class type"错误?(C++)
- 让编译器告诉哪些方法不具体,而不是错误'invalid new-expression of abstract class type'
- 共享库中非模板基的模板子类导致未定义的符号类型信息'class'链接错误
- 如何修复编译器错误"class has no member named X"?
- 直接显示过滤器错误"Class is not registered"