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

时间:2019-02-04 01:59:23

标签: c++ c++11 cocos2d-x cocos2d-x-3.x

我正在做一个扑克游戏,我有一个包含std::map的类,用于为扑克甲板上的每张纸牌分配一个值,以引用其名称。我尝试将其作为static成员作为另一个类的组成部分,因为每次创建卡时都必须分配一个值,但是由于某些原因,当我尝试访问它时,出现编译器错误未定义符号或重复的符号。

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

extern Baraja baraja;

由于某种原因,当我将其声明为static成员或static const成员时,会发生我无法访问std::map的值或得到编译器错误undefined symbol的情况。或duplicated symbol,因为我已经在网络文档中进行搜索,但是找不到原因或解决方案,所以我有这个问题。

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

1 个答案:

答案 0 :(得分:1)

我认为这是重复的。

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