标题:写了一个单例模式代码,一直报错,一直看不出来,请帮我将查一下吧!
只看楼主
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
结帖率:90.24%
已结贴  问题点数:20 回复次数:7 
写了一个单例模式代码,一直报错,一直看不出来,请帮我将查一下吧!
程序代码:
class Manager
{
public:
    // 这是一个常见的单例模式
    static Manager* GetManager();
    bool Is_jc_data_OK() { return jc_data; }
    bool Is_xx_data_OK() { return xx_data; }
    bool Is_ls_data_OK() { return ls_data; }

private:
    Manager()
    {
        jc_data = true;
        xx_data = true;
        ls_data = true;
    }

    static Manager* p_manager;
    bool jc_data;
    bool xx_data;
    bool ls_data;

};


 Manager* Manager::GetManager()
{
    if (nullptr == p_manager)
    {
        p_manager = new Manager();
    }
    return p_manager;
}
搜索更多相关主题的帖子: 单例 模式 Manager bool return 
2018-10-25 21:23
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
得分:0 
报错信息:LNK 2001

既然还有不甘心
就还没到放弃的时候~
2018-10-25 21:25
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
得分:0 
Some people here ?

既然还有不甘心
就还没到放弃的时候~
2018-10-26 08:14
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
得分:10 
p_manager 没初始化

2018-10-26 08:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
自己将提示贴全
error LNK2001: unresolved external symbol "private: static class Manager * Manager::p_manager" (?p_manager@Manager@@0PAV1@A)
缺少 Manager::p_manager 的定义
Manager* Manager::p_manager;
2018-10-26 08:39
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
得分:0 
另外你这个例子没解决单例模式析构的问题
2018-10-26 08:40
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
得分:0 
感谢各位大佬! 问题完满结局,修正后程序如下:

程序代码:
class Manager
{
public:
    // 这是一个常见的单例模式
    static Manager* GetManager();
    bool Is_jc_data_OK() { return jc_data; }
    bool Is_xx_data_OK() { return xx_data; }
    bool Is_ls_data_OK() { return ls_data; }

private:
    Manager()
    {
        jc_data = true;
        xx_data = true;
        ls_data = true;
    }
    
    ~Manager()
    {
        // 解决单例模式析构问题
        jc_data = false;
        xx_data = false;
        ls_data = false;
        delete p_manager;
        p_manager = nullptr;
    }

    static Manager* p_manager;
    bool jc_data;
    bool xx_data;
    bool ls_data;

};

//类的静态成员需要在类外初始化,勿忘
Manager* Manager::p_manager = nullptr;

既然还有不甘心
就还没到放弃的时候~
2018-10-26 09:12
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
得分:0 
你这样是不会释放单例的,下面是我之前写过的
程序代码:
#include <stdio.h>

class singleton
{
public:
        static singleton* getInstance();
        void test()
        {
                printf("singleton test\n");
        }

public:
        class gc
        {
        public:
                ~gc()
                {
                        if(m_pInstance)
                        {
                                delete m_pInstance;
                                m_pInstance = NULL;
                                printf("析构单例\n");
                        }
                }
        };

        static gc m_gc;

private:
        singleton()
        {}

        static singleton* m_pInstance;
};

singleton* singleton::m_pInstance = NULL;
singleton::gc singleton::m_gc;

singleton* singleton::getInstance()
{
        return m_pInstance = m_pInstance ? m_pInstance: new singleton();
}

int main(int argc, char** argv)
{
        singleton::getInstance()->test();

        return 0;
}

2018-10-31 17:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490689-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.078035 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved