c++ - C++中指向自身的成员变量指针

标签 c++ static-members

<分区>

当我尝试编译这段代码时,为什么g++会报错?

class A {
  private:
    static A* Aptr[5];
  public:
    static int A_count;
    A() {
        Aptr[A_count] = this;
    }
};

int A::A_count = 0;

int main() {
    A a_;
    A b_;
    return 0;
}

/tmp/ccrp4BGg.o: In function `A::A()':
try.cpp:(.text._ZN1AC2Ev[_ZN1AC5Ev]+0x18): undefined reference to `A::Aptr'
collect2: error: ld returned 1 exit status

最佳答案

说明

您只声明您的名为 A::Aptr静态数据成员,但是为了使用它,因为您在里面A 的构造函数,您必须提供一个定义

链接器诊断可能会显示 undefined reference ,这可能很难与缺少的定义相关联,但它是在讨论名称和存储位置的内部映射。

换句话说;链接器无法为存储 A::Aptr 的位置找到一个reference(即入口),这是有道理的:Without a definition you haven't given A::APtr 要使用的任何存储。


解决方案

您已经为A::A_count,如果您对 A::APtr 执行相同的操作,您将准备就绪。

class A {
 private:
    static A* Aptr[5];   // (1), declaration
 public:
    static int A_count;  // (2), declaration
    A() {
        Aptr[A_count] = this;
    }
};

A*  A::APtr[5];     // (3), definition  <-- previously missing! 
int A::A_count = 0; // (4), definition

注意:您只是询问链接器错误,但我猜您的意思是在构造 类型的对象时增加 A_count A,您目前没有做的事情。

关于c++ - C++中指向自身的成员变量指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24050151/

相关文章:

c++ - 我应该如何将包装 API 的对象传递给使用该 API 的类?

c++ - 模板元编程静态成员函数无法获取类的 const static 值

c# - 静态成员会被垃圾收集吗?

c++ - 为什么我不能像这样在静态成员函数中调用静态成员变量?

c++ - QTabBar 选项卡的内部 QWidgets?

c# - C++ 程序在多次打印 (cout) 后停止(卡住、无错误、无退出)

c++ - 如何初始化静态成员变量 "dynamically"?

c++ - 不完整类型的嵌套静态 constexpr。 C++ 是否有效?

c++ - Qt在build debug时将文件夹名中的release替换为debug

c++ - 在 Windows 8 商店应用程序中使用 Window->KeyDown 事件设置多个按键。 C