初始化和修改静态类成员

C++ - Initialize and modify a static class member

本文关键字:成员 静态类 修改 初始化      更新时间:2023-10-16

我不知道如何初始化静态类成员而不创建该类的对象。下面是我的代码:

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

在您的cpp文件中这样做:

unsigned CPassant::LastID = 0;

这被称为定义静态类成员,如果你不这样做,你最终会得到链接器错误。您只是声明了静态成员,但没有定义它。

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

您已经声明了静态成员,但尚未定义。你必须定义它。有一种方法:

namespace { 
/* ... */    
    unsigned CPassant::LastID = 0;
}; // anonym namespace

你必须做

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

初始化lastd的问题在于它位于您声明的名称空间之外。把它放在相同的命名空间中,就可以了。