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

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

<分区>

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

我的部分解决方案是将类容器声明为类作用域外的全局变量,但我知道这是一种不好的做法,如果不是这样的话我也有疑问。

extern Baraja baraja;

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

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

最佳答案

我认为这是重复的。

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

关于c++ - 如何正确创建、初始化和访问类的静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54509343/

相关文章:

c++ - 发出 std::async 任务完成的信号

c++ - 如何存储智能指针以将字符串映射到类中的成员函数,以便它不会因类型不完整而失败?

c++ - 如何在 C++11 中初始化 uint64_t

android - 在 cocos2dx 中自动调整大小

c++ - 多个序列上的 runAction

c++ - 从 Cocos2d::Layer 派生的类有一个指针数据成员。该成员也有 vector 容器。当调用 vector::push_back 时它会崩溃

C++ 风格的指针转换为整数

c++ - std::thread 的线程安全数组?

c++ - 在构造之前引用变量是否定义良好

c++ - 如何将二进制字节转换为可打印的数值?