c++ - 在静态类中初始化静态指针

标签 c++ class pointers static linker

<分区>

所以我有以下 C++ 类

class MyClass:

public: 

    static void InitObject();

private:

    static MyObject *myObject;       

};

然后在我做的 .cpp 文件中

void MyClass::InitObject
{
    myObject = new MyObject();
}

但是,我收到一个编译器错误,指出“myObject”是从 InitObject() 引用的,然后它说链接器命令失败,退出代码为 1。

为什么这行不通?我该如何解决?

最佳答案

由于 C++ 类的静态数据成员需要与实例内存分开的内存空间,因此除了在类中声明之外,还需要定义 .

你在一个单独的翻译单元(在你的 CPP 文件中)这样做:

MyObject *MyClass::myObject;

这个定义告诉编译器在静态内存区为myObject分配空间。如果没有这个定义,代码将要编译,但链接器会报告错误,因为它负责确保所有引用的静态对象都分配有内存。

关于c++ - 在静态类中初始化静态指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20157896/

相关文章:

java - 如何在java中包装类并保存接口(interface)?

c++ - 最终类的嵌套类是否自动最终?

c - 使用 C 返回数组

c++ - 如何在 Windows 上使用 Eclipse 交叉编译树莓派

c++ - Coan 给出了带有定义符号的 "expands to nothing within expression"

javascript - 获取 ES6 类的静态列表

c - 为什么 bsearch 返回 void *?

c++ - 在指向父对象的指针上初始化子对象

c++ - 在 C++ 中使用::(范围解析运算符)

c++ - 检查字符串是否相同C++