【问题标题】:How to correctly create, initialize and access to a static member of a class? [duplicate]如何正确创建、初始化和访问类的静态成员? [复制]
【发布时间】:2019-02-04 01:59:23
【问题描述】:

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

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

extern Baraja baraja;

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

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

【问题讨论】:

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


    【解决方案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}}
    };
    

    【讨论】:

    • 非常感谢!有没有什么文件或书籍可以让你更好地了解这一点?
    • @IbrahimCS this article 对您遇到的情况提供了相对技术性的描述。如果您正在寻找更有指导性的解释,搜索“静态数据成员初始化”(即此答案所演示的内容)将产生更多示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2011-07-18
    • 2011-09-19
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2015-05-18
    相关资源
    最近更新 更多