我对C ++一点工作,我不明白如何在C ++中使用静态字段,它们似乎没用。请纠正我。
我做不到:
class AClass{
public:
static int static_field = 0;
};
这两个都不起作用
class AClass{
public:
static int static_field;
};
int main(){
int AClass::static_field = 0;
return 0;
}
答案 0 :(得分:15)
实际上,你很亲密。
您应该在int AClass::static_field = 0;
之外移动main()
,因此它在CPP文件中是全局的,最好是AClass.cpp.
这样,您在标头中声明它并在源文件中初始化它。您可以在main()
或其他任何地方使用它,只需在设置此声明/初始化后执行AClass::static_field
即可。
PS:他们绝对没用。
这是一个很好的用例...假设你有内存泄漏,你需要跟踪它们。你在你的类中放了一个静态计数器,所以该类的所有实例都共享它。然后,您可以使任何构造函数/析构函数递增和递减该计数器。因此,您可以打印计数器以显示有多少实例存在以帮助查找泄漏。
答案 1 :(得分:11)
您必须在main函数范围之外初始化static_field。
int AClass::static_field = 0;
int main(){
}
答案 2 :(得分:5)
试试这个:
class AClass{
public:
static int static_field;
};
int AClass::static_field = 0;
int main(){
return 0;
}
答案 3 :(得分:4)
当你在这里声明一个静态变量时,你会说这个变量的一个实例在该类的所有实例之间共享。
将声明移出主函数之外,就像提供的其他一些答案一样,这是正确的解决方案。
以下是来自msdn的静态关键字的一些文档:
http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx
希望这会有所帮助