C ++ - 初始化和修改静态类成员

时间:2011-12-06 16:04:53

标签: c++ class static

我不知道如何在不创建此类对象的情况下初始化静态类成员。 这是我的代码:

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/ how-to-initialize-a-static-member

4 个答案:

答案 0 :(得分:4)

在cpp文件中执行此操作:

unsigned CPassant::LastID = 0;

这称为定义静态类成员,如果不这样做,最终会出现链接器错误。您刚刚声明了静态成员但没有定义它。

请注意,在定义静态成员时,访问说明符并不重要。

答案 1 :(得分:3)

您已声明但未定义静态成员。你必须定义它。这是一种方式:

namespace { 
/* ... */    

    unsigned CPassant::LastID = 0;

}; // anonym namespace

答案 2 :(得分:0)

你必须这样做

unsigned CPassant::LastID = 0;  在.cpp文件中..

答案 3 :(得分:0)

您初始化LastID的问题在于它在您声明它的名称空间之外。将它放在相同的命名空间中,它将起作用。