c ++类中对象计数的静态变量?

时间:2011-10-15 22:50:09

标签: c++ class static

我希望有一个静态成员变量来跟踪已经创建的对象数量。像这样:

class test{
    static int count = 0;
    public:
        test(){
            count++;

        }
}

这不起作用,因为根据VC ++,a member with an in-class initializer must be constant。所以我环顾四周,显然你应该这样做:

test::count = 0;

哪个会很棒,但我想要算是私人的。

修改 哦,小伙子,我才意识到我需要这样做:

int test::count = 0;

我见过一些事情test::count = 0,所以我假设你不必再声明类型了。

我想知道是否有办法在课堂上这样做。

EDIT2:

我正在使用的是什么:

class test{
    private:
        static int count;
    public:
        int getCount(){
            return count;
        }
        test(){
            count++;

        }
}
int test::count=0;

现在它说:'test' followed by 'int' is illegal (did you forget a ';'?)

EDIT3:

是的,在课程定义后忘了分号。我不习惯这样做。

3 个答案:

答案 0 :(得分:13)

static int count;

在类定义的标题中,

int test::count = 0;

在.cpp文件中。它仍然是私有的(如果你将声明留在类的私有部分的标题中)。

您需要这个的原因是因为static int count是一个变量声明,但您需要在单个源文件中定义,以便链接器知道您在使用名称时引用的内存位置{{ 1}}。

答案 1 :(得分:3)

允许在函数内初始化静态变量,因此解决方案可以是这样的

 class test
 {
    private:
    static int & getCount ()
    {
       static int theCount = 0;
       return theCount;
    }
    public:
    int totalCount ()
    {
       return getCount ();
    }

    test()
    {      
       getCount () ++;
    }
 };

通常使用这种技术可以解决有关声明中静态成员初始化的C ++限制。

答案 2 :(得分:1)

static类成员必须在命名空间范围内定义(并可能初始化),成员访问规则不适用。