C ++, как получить статическую переменную в классе? - PullRequest
3 голосов
/ 17 марта 2011

Я не могу получить правильный синтаксис для статических переменных и классов 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();
}

Текущая локальная статика в функции печати является локальной для этой функции, но я бы хотел, чтобы это было «личное и глобальное в классе».

Такое ощущение, что мне не хватает некоторого базового: синтаксиса s ++ здесь.

/ Спасибо


Решение :

Мне не хватало

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 ]

6 голосов
/ 17 марта 2011

Ваш закомментированный код находится на полпути.Вам также нужно определить его вне класса с помощью оператора int Nisse::cnt = 0;.

РЕДАКТИРОВАТЬ: вот так!

class Nisse
{
    private: 
        static int cnt;
    public: 
...     
};
int Nisse::cnt = 0;
3 голосов
/ 17 марта 2011
2 голосов
/ 17 марта 2011

Вы не можете инициализировать статическую переменную-член в определении класса.

Из ваших комментариев кажется, что вы немного запутались с синтаксисом C ++, тем более что ваши методы также определены там, как вы бы это делали в Java.1006 *

файл с именем Nisse.cc

Nisse::cnt = 0;

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

int Nisse::howMany()
{
    //So I can return it here.
    return cnt;
}
0 голосов
/ 17 марта 2011

В заголовочном файле:

class Nisse
{
    private: 
        static int cnt;

    public: 
...
};

В файле cpp:

int Nisse::cnt = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...