结构中的范围c ++

时间:2015-04-14 02:02:30

标签: c++ scope

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

struct Deck{
    char suit;
    int value;
};

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

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);
}

4 个答案:

答案 0 :(得分:1)

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

#include <string>

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

然后像fillDeck一样访问它:

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

答案 1 :(得分:0)

像这样声明你的结构

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

然后你可以像这样访问它:

deck->suit

答案 2 :(得分:0)

如果您需要保留套装的全名,使用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语句,在这种情况下可能看起来更好。

答案 3 :(得分:0)

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

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

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

你的for循环可能会有类似ptrDeck [i] .suit =“不管它是什么”...但是你再次将你的西装宣布为char类型所以在我看来也许你必须要考虑到这一点一点......

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

如果我对某个地方的理解是某个地方有人请让我知道,获得一些反馈会很酷......