C ++ - Инициализация и изменение статического члена класса - PullRequest
1 голос
/ 06 декабря 2011

Я не знаю, как инициализировать статический член класса без создания объекта этого класса.Вот мой код:

namespace { 

    class CPassant : public thread
    {
        private:
            static unsigned LastID;

        public:
            CPassant (unsigned pDelaiArr = 0, unsigned pDelaiDep = 0)
            {
              (blabla)   
            }

            static void setLastID (unsigned Valeur)
            {
                LastID = Valeur; 
                    /* error : undefined reference to `(anonymous     
                        namespace)::CPassant::LastID' */

            } // setLastID ()

        }; // class CPassant

} // anonym namespace

int main ()
{
    CPassant::CPassant ().setLastID(0);
    //  doesn't work too:
// unsigned CPassant::LastID = 0;

    return 0;
}

Спасибо

Примечание: я уже посмотрел эти ответы, но ни один из них не сработал:

stackoverflow.com/ initialize-a-static-member-an-array-in-c

stackoverflow.com / как инициализировать-static-член

Ответы [ 4 ]

4 голосов
/ 06 декабря 2011

Сделайте это в вашем файле cpp:

unsigned CPassant::LastID = 0;

Это называется определением статического члена класса. Если вы этого не сделаете, вы получите ошибки компоновщика.Вы только что объявили статический член, но не определили его.

Обратите внимание, что спецификаторы доступа здесь не имеют значения при определении статического члена.

3 голосов
/ 06 декабря 2011

Вы объявили, но не определили статический член. Вы должны определить это. Вот один из способов:

namespace { 
/* ... */    

    unsigned CPassant::LastID = 0;

}; // anonym namespace
0 голосов
/ 06 декабря 2011

Проблема с вашей инициализацией LastID заключается в том, что она находится вне пространства имен, которое вы объявили.Поместите его в то же пространство имен, и оно будет работать.

0 голосов
/ 06 декабря 2011

вам нужно сделать

<code>unsigned CPassant::LastID = 0; в файле .cpp ..

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