Как правильно создать, инициализировать и получить доступ к статическому члену класса?
Я делаю игру в покер, и у меня есть класс, который содержит 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}}
};