C ++如何在类中获取静态变量?

时间:2011-03-17 16:17:20

标签: c++ static

我无法使用静态变量和c ++类获得正确的语法。

这是一个显示我问题的简化示例。

我有一个函数可以更新所有对象应该相同的变量, 然后我有另一个想要使用该变量的函数。 在这个例子中,我只是返回它。

#include <QDebug>

class Nisse
{
    private: 
        //I would like to put it here:
        //static int cnt;
    public: 
        void print()
        {
            //And not here...!
            static int cnt = 0;
            cnt ++;
            qDebug() << "cnt:" << cnt;
        };

        int howMany()
        {
            //So I can return it here.
            //return cnt;
        }
};

int main(int argc, char *argv[])
{
    qDebug() << "Hello";
    Nisse n1;
    n1.print();

    Nisse n2;
    n2.print();
}

print函数中的当前本地静态是此函数的本地静态, 但我希望它是“班上的私人和全球”。

感觉我在这里缺少一些基本的:s c ++语法。

/感谢


解决方案

我错过了

int Nisse::cnt = 0;

所以工作示例看起来像

#include <QDebug>

class Nisse
{
    private: 
        static int cnt;
    public: 
        void print()
        {
            cnt ++;
            qDebug() << "cnt:" << cnt;
        };

        int howMany()
        {
            return cnt;
        }
};

int Nisse::cnt = 0;

int main(int argc, char *argv[])
{
    qDebug() << "Hello";
    Nisse n1;
    n1.print();

    Nisse n2;
    n2.print();

    qDebug() << n1.howMany();
}

4 个答案:

答案 0 :(得分:6)

您注释掉的代码就在那里。您还需要使用int Nisse::cnt = 0;语句在类外定义它。

编辑:像这样!

class Nisse
{
    private: 
        static int cnt;
    public: 
...     
};
int Nisse::cnt = 0;

答案 1 :(得分:3)

答案 2 :(得分:2)

您无法在类定义中初始化静态成员变量。

从您的评论中,您似乎对C ++语法有点困惑,特别是因为您的方法也像在Java中一样定义。

文件名Nisse.h

#include <QDebug>

class Nisse
{
    private: 
        static int cnt;
    public: 
        void print();
        int howMany();

};

名为Nisse.cc的文件

Nisse::cnt = 0;

void Nisse::print()
{
    cnt++;
    qDebug() << "cnt:" << cnt;
}

int Nisse::howMany()
{
    //So I can return it here.
    return cnt;
}

答案 3 :(得分:0)

在头文件中:

class Nisse
{
    private: 
        static int cnt;

    public: 
...
};

在cpp文件中:

int Nisse::cnt = 0;