这段代码有什么问题?

时间:2010-05-19 18:05:59

标签: 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;
}

错误:

In function `main':
undefined reference to `B::b'
undefined reference to `B::b'
undefined reference to `B::b'
undefined reference to `B::b'

3 个答案:

答案 0 :(得分:16)

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

int B::b;

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

答案 1 :(得分:3)

因为它是静态的,你还需要为B::b定义存储(在类定义中,你所做的就是声明变量)。

您需要添加:

int B::b;

答案 2 :(得分:0)

您必须在相应的.cpp文件中初始化静态成员,如int B :: b = 0