在C ++中创建静态实例的未解决的外部因素

时间:2012-05-16 09:49:16

标签: c++

我已经制作了这个C ++代码:

class TestInstance
{
    public:
        TestInstance();
        ~TestInstance();
        static TestInstance& GetInstance();

    private:
        static TestInstance* testInstance;
};

但是我在编译时遇到了这个错误:

  

错误LNK2001:未解析的外部符号“private:static class   TestInstance * TestInstance :: testInstance“   (?testInstance @ @@ TestInstance @ 0PAV1 A)

     

致命错误LNK1120:1个未解析的外部

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

是,在实施文件中初始化static成员。

//TestInstance.cpp
TestInstance* TestInstance::testInstance = NULL; 

答案 1 :(得分:1)

您需要在实现文件中初始化静态成员变量。为什么有必要。

由于静态成员变量不是该类的单个对象(或实例)的一部分,因此它们具有该类的所有对象的相同值。这就是为什么静态成员对象没有在该类的单个对象中给出内存。那么,如何为他们分配空间。编译器不知道。因此,您必须在实现文件中定义它们,以便编译器可以为该转换单元中的这些成员分配空间。

对于您的班级,如果您将执行sizeof(a),其中a是该类的对象,您将看到该大小显示为一个。因为类的对象中没有testInstance的空间。并且大小不能为零,因此它将是一个。