我正在做一个扑克游戏,我有一个包含std::map
的类,用于为扑克甲板上的每张纸牌分配一个值,以引用其名称。我尝试将其作为static
成员作为另一个类的组成部分,因为每次创建卡时都必须分配一个值,但是由于某些原因,当我尝试访问它时,出现编译器错误未定义符号或重复的符号。
我的部分解决方案是将类容器声明为类范围之外的全局变量,但是我知道这是一种不好的做法,如果没有的话,我还是会怀疑。
extern Baraja baraja;
由于某种原因,当我将其声明为static
成员或static const
成员时,会发生我无法访问std::map
的值或得到编译器错误undefined symbol
的情况。或duplicated symbol
,因为我已经在网络文档中进行搜索,但是找不到原因或解决方案,所以我有这个问题。
如何正确创建,初始化和访问类的静态成员?
答案 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}}
};