7

我是 ac#developper 试图做 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:无法解析的外部符号”私有:静态类 myNamespace::Application myNamespace::Application::_instance”(?_instance@Application@myNamespace@@0V12@A)

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

非常感谢!

4

1 回答 1

19

您只在 Application 类中声明 _instance,您需要在 .cpp 文件中定义它:

namespace myNamespace
{
    Application Application::_instance; 
}

§ 9.4.2.2

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

于 2013-09-25T12:16:46.207 回答