2015-10-03 82 views
1

所以我是编程的noob,我不确定为什么我无法在我的类中创建一个静态变量?我从课堂上得到了一个问题,我不确定我是否以正确的方式开展工作。 问题是:使用静态成员项创建一个类,以便无论何时创建新对象 ,都可以报告该类的对象总数。在类中创建静态变量(C++)

这是到目前为止我的代码:

#include <iostream> 

class ObjectCount 
{ 
public: 
    ObjectCount(); 
    void reportObjectNo(); 

private: 
    static int objectNo = 0; 

}; 


ObjectCount::ObjectCount() 
{ 
    objectNo++; 
} 

void ObjectCount::reportObjectNo() 
{ 
    std::cout << "Number of object created for class ObjectCount: " << objectNo << std::endl; 
} 

int main() 
{ 
    ObjectCount firstObject; 
    firstObject.reportObjectNo(); 

    ObjectCount secondObject; 
    secondObject.reportObjectNo(); 

    ObjectCount thirdObject; 
    thirdObject.reportObjectNo(); 
    return 0; 
} 

和错误我得到的回复是:

ISO C++ forbids in-class initialization of non-const static member 'objectNo' 
line 9 

我真诚地道歉,如果这已经被问过,但我无法找到任何帮助我,如果有链接,将不胜感激:)

+0

[error:ISO C++禁止非常量静态成员的类内初始化]的可能重复(http://stackoverflow.com/questions/20310000/error-iso-c-forbids-in-class-initialization-的-非const静态部件) –

回答

2

错误消息告诉你,你不能初始化conststatic来自课堂的成员。这意味着你将需要更改代码以看起来更象:

class ObjectCount 
{ 
public: 
    ObjectCount(); 
    void reportObjectNo(); 

private: 
    static int objectNo; 

}; 

int ObjectCount::objectNo = 0; 
0

C++允许声明和在类的身体只定义静态常量整型。

class Foo 
{ 
    static const int xyz = 1; 

}; 

非const静态成员变量必须在类中声明,然后定义之外it.you在实现文件中定义它即的.cpp

int ObjectCount::objectNo = 0; 

此外,使用它的正确方法将是

ObjectCount::objectNo++; 

因为,objectNo与类关联而不与任何对象关联。