use*_*541 0 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;
}
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
你只申报您的静态数据成员命名的A::Aptr,但为了使用它,因为你是在构造函数中A,你必须提供一个定义.
链接器诊断可能会说未定义的引用,这可能很难与缺少的定义相关联,但它正在讨论其名称和存储位置的内部映射.
换一种说法; 链接器无法找到存储位置的引用(即条目)A::Aptr,这是有道理的:没有定义,您没有提供A::APtr任何存储空间.
你已经同时提供了一个声明 (2)和定义 (4)对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
Run Code Online (Sandbox Code Playgroud)
注意:您只是询问链接器错误,但我猜你的意思是A_count在构造一个类型的对象时增加A,这是你目前没有做的事情.
| 归档时间: |
|
| 查看次数: |
1079 次 |
| 最近记录: |