1

我已经生成了这个 C++ 代码:

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

    private:
        static TestInstance* testInstance;
};

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

错误 LNK2001:无法解析的外部符号“私有:静态类 TestInstance* TestInstance::testInstance”(?testInstance@TestInstance@@0PAV1@A)

致命错误 LNK1120:1 个未解决的外部问题

任何的想法?

4

2 回答 2

7

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

//TestInstance.cpp
TestInstance* TestInstance::testInstance = NULL; 
于 2012-05-16T09:50:23.557 回答
2

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

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

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

于 2012-05-16T10:09:10.050 回答