9

可能重复:
在 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

4 回答 4

16

事实上,你很接近。

你应该移动: 在 CPP 文件中它是全局的,最好是在int AClass::static_field = 0;外部main()AClass.cpp.

这样,您可以在标头中声明它并在源文件中对其进行初始化。设置好此声明/初始化后,您可以main()在其他地方或任何地方使用它。AClass::static_field

PS:它们绝对不是没用的。

这是一个很好的用例......假设您有内存泄漏,您需要跟踪它们。您在类中放置了一个静态计数器,因此该类的所有实例都共享它。然后,您可以使任何构造函数/析构函数递增和递减该计数器。因此,您可以打印计数器以显示存在多少个类实例以帮助查找泄漏。

于 2012-08-10T15:44:18.123 回答
14

您必须在主函数范围之外初始化 static_field 。

int AClass::static_field = 0;
int main(){
}
于 2012-08-10T15:46:50.017 回答
6

试试这个:

class AClass{
    public:
        static int static_field;
};

int AClass::static_field = 0;

int main(){
    return 0;
}
于 2012-08-10T15:48:05.063 回答
4

当你在这里声明一个静态变量时,你是在声明这个变量的一个实例将在类的所有实例之间共享。

像提供的其他一些答案一样,将声明移到主函数之外是正确的解决方案。

下面是一些来自 msdn 的关于 static 关键字的文档:

http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx

希望这可以帮助

于 2012-08-10T15:53:34.697 回答