结构 C++ 中的作用域

Scope in structs c++

我正在使用 C++ 制作一个用卡片填充 Deck 结构的程序。这是 Deck 定义:

struct Deck{
    char suit;
    int value;
};

我的问题是使用我的结构 fillDeck 的函数无法访问该结构的内容。也许我做的完全错了,但这是我所拥有的:

void fillDeck(Deck *deck){
   for (int num  = 2; num <= 14; num++){
   for(int count = 0; count < 4; count++){
         if(count == 0){
            suit = "clubs";
         }
         if(count == 1){
            suit = "hearts";
         }
         if(count == 2){
             suit = "diamonds";
         }
         if(count == 3){
             suit = "spades";
         }
    }
   }
}

我的主要功能如下

int main (int argc, char *argv[]){
   Deck deck;
   fillDeck(&deck);
}

像这样声明你的结构

struct Deck{
    char* suit;
    int value;
};

然后你可以这样访问它:

deck->suit

如果您将结构成员 suit 更改为字符串,您的主函数将起作用。

#include <string>

struct Deck
{
    std::string suit;
    int value;
};

然后像这样在 fillDeck 中访问它:

...
deck->suit = "clubs";
...

如果您需要保留花色的全名,使用std::string 是一个不错的选择。 如果你必须使用字符来表示花色,那么你可以使用缩写如下:

void fillDeck(Deck *deck){
   for (int num  = 2; num <= 14; num++){
   for(int count = 0; count < 4; count++){
         if(count == 0){
            deck->suit = `C`;
         }
         if(count == 1){
            deck->suit = `H`;
         }
         if(count == 2){
             deck->suit = `D`;
         }
         if(count == 3){
             deck->suit = `S`;
         }
    }
   }
}

你可以相应地调整你的其余部分。

此外,您可能想尝试使用 switch case 语句,而不是连续的 if 语句,在这种情况下可能看起来更好。

在查看您传递给 main() 中的 fillDeck(Deck *deck) 函数的内容时,我想说您可能传递了错误的 deck 参数,因为现在您正在将地址传递给您尚未初始化的 Deck 数据结构...

我认为你应该采取的策略是在你的主函数中定义一个 Deck 类型的指针,可能类似于 Deck *ptrDeck,然后该指针应该指向一个新的 Data 类型的结构。我现在不太了解你的问题集,但我也认为也许那个指针真的应该指向一个牌组类型的数组,然后它会用相应的值保存每套西装。您很可能必须使用 for 循环来填充所说的数据类型数组,以保存每个花色和值。这 can/should 在它自己的功能中完成。

然后您可以创建另一个函数来打印 Deck 结构的每个初始化实例。

你的 for 循环可能会有类似 ptrDeck[i].suit = "whatever it is" 的东西......但是你又把你的西装声明为 char 类型所以在我看来你可能必须考虑这一点...

我不是专家,我花了一段时间才理解指针以及如何访问结构内部的数据。但我认识到你遇到的困难,因为它与我遇到的困难相似,这只是我在没有明确为你编写代码的情况下解决它的过程......

如果我对此的理解有误,请告诉我,如果能得到一些反馈会很酷...