1

我正在制作一个扑克游戏,我有一个类,其中包含一个std::map为扑克牌组上的每张牌分配一个值的类,它指的是它的名字。我试图将它作为另一个类的组件作为static成员,因为每次创建卡时我都必须分配一个值,但是由于某种原因,当我尝试访问它时,我得到编译器错误未定义符号或重复符号。

我的部分解决方案是将类容器声明为类范围之外的全局变量,但我知道这是一种不好的做法,如果没有的话,我仍然有疑问。

extern Baraja baraja;

出于某种原因,当我将其声明为static成员或static const成员时,碰巧我无法访问的值,std::map或者我得到编译器错误,undefined symbol或者duplicated symbol我在网络文档中搜索并且找不到我有这个问题的原因或解决方案。

如何正确创建、初始化和访问类的静态成员?

4

1 回答 1

3

我认为这是重复的。

#include <string>
#include <unordered_map>

enum class CardColor {Heart};

struct Card
{
    CardColor color;
    int value;
};

class Game
{
private:
    static std::unordered_map<std::string, Card> deck;
public:
    Game(){}
};

在您的 .cpp 文件中

std::unordered_map<std::string, Card> Game::deck = std::unordered_map<std::string, Card>
{
    std::pair<std::string,Card>{"HeartSeven",{ CardColor::Heart,7}},
    std::pair<std::string,Card>{"HeartEight",{ CardColor::Heart,8}}
};
于 2019-02-04T02:30:33.700 回答