为什么我不能在C ++中初始化静态字段

时间:2012-08-10 15:42:11

标签: c++ static

  

可能重复:
  Defining static members in C++

我对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;
}

4 个答案:

答案 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

希望这会有所帮助