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

时间:2013-09-25 12:14:27

标签: c++ singleton

我是一个尝试做c ++事情的c#developctor,我在这里无法理解这个问题:

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:static class myNamespace :: Application myNamespace :: Application :: _ instance“(?_ instance @ Application @ myNamespace @@ 0V12 @ A)

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

非常感谢!

1 个答案:

答案 0 :(得分:13)

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

namespace myNamespace
{
    Application Application::_instance; 
}

§9.4.2.2

  

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