我已经制作了这个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个未解析的外部
有什么想法吗?
答案 0 :(得分:5)
是,在实施文件中初始化static
成员。
//TestInstance.cpp
TestInstance* TestInstance::testInstance = NULL;
答案 1 :(得分:1)
您需要在实现文件中初始化静态成员变量。为什么有必要。
由于静态成员变量不是该类的单个对象(或实例)的一部分,因此它们具有该类的所有对象的相同值。这就是为什么静态成员对象没有在该类的单个对象中给出内存。那么,如何为他们分配空间。编译器不知道。因此,您必须在实现文件中定义它们,以便编译器可以为该转换单元中的这些成员分配空间。
对于您的班级,如果您将执行sizeof(a),其中a是该类的对象,您将看到该大小显示为一个。因为类的对象中没有testInstance的空间。并且大小不能为零,因此它将是一个。