这段代码有什么问题?

Laz*_*zer 4 c++ static

#include<stdio.h>

class A { public: int a;};
class B: public A { 
public:
    static int b;
    B(){
        b++;
        printf("B:%d\n",b);
    }   
};

int main() {

    A* a1 = new B[100];
    A* a2 = new B();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误:

In function `main':
undefined reference to `B::b'
undefined reference to `B::b'
undefined reference to `B::b'
undefined reference to `B::b'
Run Code Online (Sandbox Code Playgroud)

Pie*_*BdR 16

静态变量需要在类外部分配.在B类之外添加这一行:

int B::b;
Run Code Online (Sandbox Code Playgroud)

将静态变量视为使用extern关键字声明.他们仍然需要在某处分配.这意味着分配永远不应该在头文件中!