Как правильно создать, инициализировать и получить доступ к статическому члену класса?

Я делаю игру в покер, и у меня есть класс, который содержит std::map назначить значение для каждой карты в покерной колоде, ссылаясь на ее название. Я пытался поместить его как компонент другого класса, как static член, так как я должен присваивать значение каждый раз, когда создается карта, но по какой-то причине, когда я пытаюсь получить к ней доступ, я получаю ошибку компилятора неопределенный символ или дублированный символ.

Мое частичное решение было объявить контейнер класса как глобальную переменную вне области видимости класса, но я знаю, что это плохая практика, и если нет, то в любом случае я сомневаюсь.

extern Baraja baraja;

По какой-то причине, когда я объявляю это static член или static const член, случается, что я не могу получить доступ к значениям std::map или я получаю ошибку компилятора undefined symbol или же duplicated symbol так как я искал в веб-документации и не могу найти причину или решение, у меня есть этот вопрос.

Как правильно создать, инициализировать и получить доступ к статическому члену класса?

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}}
};
Другие вопросы по тегам