2012-08-10 75 views
5

可能重复:
Defining static members in C++为什么我不能用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; 
} 
+0

'@ w00te'和其他人已经回答了这个问题。我认为你的困惑是由于C++ *声明*和*定义*是两个不同的事实。一个使符号可见,另一个分配存储空间。搜索“C++声明vs定义”或类似内容。 – David 2012-08-10 16:01:28

+0

Hrm?我的答案有最长的计时器,我不记得在任何地方使用单词定义。来自MSFT:“声明:是没有以下定义的类名称声明,如类T ;.”那就是他在第二个代码示例中的含义。 – 2012-08-10 16:41:03

回答

9

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

int AClass::static_field = 0; 
int main(){ 
} 
14

其实,你很接近。

您应该移动:int AClass::static_field = 0;以外的main()所以这是一个CPP文件中全局,最好AClass.cpp.

这样一来,你在你的头声明,并在源文件中对其进行初始化。您可以在main()或其他任何地方使用它,只需在完成声明/初始化设置后执行AClass::static_field即可。

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

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

4

试试这个:

class AClass{ 
    public: 
     static int static_field; 
}; 

int AClass::static_field = 0; 

int main(){ 
    return 0; 
} 
4

当你在这里声明一个静态变量就表示有将是这个变量的类的所有实例共享的一个实例。

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

下面是从MSDN上static关键字一些文档:

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

希望这有助于

相关问题