为啥错误 LNK2001:在这种情况下无法解析外部符号? [复制]

Posted

技术标签:

【中文标题】为啥错误 LNK2001:在这种情况下无法解析外部符号? [复制]【英文标题】:why error LNK2001: unresolved external symbol in this case? [duplicate]为什么错误 LNK2001:在这种情况下无法解析外部符号? [复制] 【发布时间】:2012-09-25 01:30:42 【问题描述】:

可能重复:Defining static members in C++Static method with a field

我在网上找到了以下关于单例实现的代码,并决定试一试:

#include <iostream>

class Singleton

    Singleton()
    static Singleton *s_instance;

public:
    static Singleton* getInstance()
    
        if(!s_instance)
            s_instance = new Singleton();

        return s_instance;
    
;

int main()

    Singleton::getInstance();
    return(0);

它看起来很简单。但是当我在 Visual Studio 中构建它时,它会给出一个链接器错误消息:

main.obj : error LNK2001: unresolved external symbol "private: static class Singleton
* Singleton::s_instance" (?s_instance@Singleton@@0PAV1@A)
C:\Users\boll\Documents\Visual Studio 2010\Projects\hello_world\Debug\hello_world.exe :
fatal error LNK1120: 1 unresolved externals'

为什么在这种情况下's_instance'没有得到解决?

【问题讨论】:

看看这个:***.com/questions/12573816/… 你需要在类外定义s_instance 知道了。谢谢克里斯和神秘主义者。 Defining static members in C++ 和 ***.com/questions/8612206/…、***.com/questions/3585069/… 等可能重复 这里其实有个小问题:静态数据成员需要在类外定义一次,这是c++规则。但为什么?静态成员函数 'getInstance()' 如果我们使用作用域 ::,则具有可见性,但为什么 's_instance' 会导致未解析的外部符号错误? 【参考方案1】:

我认为你应该先初始化s_instance=NULL。可以看以下链接:http://www.codeproject.com/Articles/1921/Singleton-Pattern-its-implementation-with-C

【讨论】:

欢迎来到 Stack Overflow。当你说'之前初始化s_instance = NULL'时,你能详细说明你的意思吗? “之前”是什么?

以上是关于为啥错误 LNK2001:在这种情况下无法解析外部符号? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

VS2008 VC++/MFC 出错LNK2001与1120

错误 1 error LNK2001: 无法解析的外部符号 _mainCRTStartup 错误 2 error LNK1120: 1 个无法解析的外部命

radial.o:错误 LNK2001:无法解析的外部符号 lambda_fatal 错误 LNK1120:8 个无法解析的外部,error.failed 退出状态为 1120

VS编写C++/C时出现错误LNK2001 无法解析的外部符号 main

错误 LNK2001:未解析的外部符号 WINAPI [重复]

error LNK2001: 无法解析的外部符号