繁体   English   中英

为什么在调用静态属性时得到“未解决的外部条件”? Visual C ++

[英]Why do I get an “Unresolved Externals” when calling a static attribute? Visual C++

尽管对此主题有很多答案,但我仍然有问题。

我希望像每个人一样实现Singleton模式。 我尝试了这个:

class Factory
{

private:
    Factory(void);
    static Factory* self_inst;

public:

    ~Factory(void);

    IPortIO* getStrategy(int portType);
    static Factory *getInstance()
    {           
        if(self_inst == NULL)
            self_inst = new Factory();
        return self_inst;       
    }

};

当我在getInstance()静态方法中调用* self_inst *时,就会出现问题。 许多人说,在使用静态变量时,不仅必须声明它,还必须在其他地方定义它。 好吧,我很难在一个地方定义它:

1课外:

Factory* Factory::self_inst;

2在课外,有一个值:

Factory* Factory::self_inst=NULL;

3在静态方法内部:

static Factory *getInstance()
{     
    Factory* Factory::self_inst;      
    if(self_inst == NULL)
        self_inst = new Factory();
    return self_inst;       
}

4并在static方法内部但具有一个值:

static Factory *getInstance()
{     
    Factory* Factory::self_inst=NULL;      
    if(self_inst == NULL)
        self_inst = new Factory();
    return self_inst;       
}

没用! 最终,我决定不在类中创建静态属性,而是在static方法内部创建静态变量。 这可行,但是绝对不一样,也不是一种好的编程习惯,因为如果我需要使用两个静态方法访问相同的变量,该怎么办? 这不是我的情况,但这是一个很好的问题,我真的很想知道是否有人热衷于此。

数字2是正确的(实际上数字1是正确的,因为默认初始化为NULL),只需记住将其放在cpp文件中,而不是在标头中即可。

如果仍然无法正常工作,请发布错误消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM