【问题标题】:c++ singleton attempt: unresolved external symbol [duplicate]c ++单例尝试:未解析的外部符号[重复]
【发布时间】:2013-09-25 12:14:26
【问题描述】:

我是一名 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);
    };
}

(这应该是单例...)

这会导致错误: "error LNK2001: unresolved external symbol "private: static class myNamespace::Application myNamespace::Application::_instance" (?_instance@Application@myNamespace@@0V12@A)"

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

非常感谢!

【问题讨论】:

    标签: c++ singleton


    【解决方案1】:

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

    namespace myNamespace
    {
        Application Application::_instance; 
    }
    

    第 9.4.2.2 节

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

    【讨论】:

    • 天哪,它有效!!!!多谢。 (以myNamespace::Application myNamespace::Application::_instance;为例)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2016-05-04
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多