[英]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.