C++ 单例尝试:未解析的外部符号

c++ singleton attempt: unresolved external symbol

本文关键字:外部 符号 单例尝 C++      更新时间:2023-10-16

我是一个试图做 c++ 事情的 c# 开发人员,但我无法理解这里的问题:

namespace myNamespace
{
    class Application
    {
    private:
        Application(void);
        ~Application(void);
        // Not copyable
        Application(const Application&);
        Application& operator= (const Application&);
        static Application _instance; 
        [...]
    public:
        static Application& current(void);
    };
}

(这应该是一个单例...

这会导致错误:"错误 LNK2001:未解析的外部符号"private:静态类 myNamespace::Application myNamespace::Application::_instance" (?_instance@Application@myNamespace@@0V12@A)"

是因为我正在使用我在类声明中声明的类吗?

多谢!

你只在应用程序类中声明_instance,你需要在.cpp文件中定义它

namespace myNamespace
{
    Application Application::_instance; 
}

§ 9.4.2.2

静态数据成员在其类定义中的声明不是定义,并且可能属于 cv 限定的 void 以外的不完整类型。静态数据成员的定义应出现在包含成员类定义的命名空间作用域中。在命名空间范围的定义中,静态数据成员的名称应由其类名使用 :: 运算符限定。