在类中创建静态变量(C ++)

时间:2015-10-03 02:54:54

标签: c++ class static-members

所以我是一个编程的菜鸟,我不确定为什么我不能在我的班级中创建一个静态变量?我从课堂上得到了一个问题,我不确定我是否会以正确的方式进行。 问题是:创建一个带有静态成员项的类,以便每当有新对象时 创建后,可以报告该类的对象总数。

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

#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

如果已经有人问我,我真诚地道歉,但是我找不到任何有帮助的东西,如果有链接将不胜感激:)

2 个答案:

答案 0 :(得分:2)

错误消息告诉您,您无法从类中初始化const static成员。这意味着您需要更改代码以使其更像:

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

private:
    static int objectNo;

};

int ObjectCount::objectNo = 0;

答案 1 :(得分:0)

C ++允许您在类体中声明和定义静态const整数类型。

class Foo
{
    static const int xyz = 1;

};

非常量静态成员变量必须在类中声明,然后在其外部定义。您在实现文件中定义它,即.cpp

int ObjectCount::objectNo = 0;

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

ObjectCount::objectNo++;

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