我希望有一个静态成员变量来跟踪已经创建的对象数量。像这样:
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:
是的,在课程定义后忘了分号。我不习惯这样做。
答案 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
类成员必须在命名空间范围内定义(并可能初始化),成员访问规则不适用。