我是一个尝试做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)”
是因为我正在使用我在类声明中声明的类吗?
非常感谢!
答案 0 :(得分:13)
您只在应用程序类中声明 _instance
,您需要在.cpp文件中定义:
namespace myNamespace
{
Application Application::_instance;
}
§9.4.2.2
静态数据成员在其类定义中的声明不是定义,并且除了cv-qualified void之外可能是不完整的类型。静态数据成员的定义应出现在包含成员类定义的命名空间范围内。在命名空间作用域的定义中,静态数据成员的名称应使用::运算符通过其类名限定。