【问题标题】:C++ - Initialize and modify a static class memberC++ - 初始化和修改静态类成员
【发布时间】:2011-12-06 16:04:52
【问题描述】:

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

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

【问题讨论】:

    标签: c++ class static


    【解决方案1】:

    在您的 cpp 文件中执行此操作:

    unsigned CPassant::LastID = 0;
    

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

    请注意,在定义静态成员时,访问说明符在此处无关紧要。

    【讨论】:

    • 哦,谢谢!我已经尝试过了,但我在 main() 中写了它。现在可以使用了
    • @Hahuha:你在命名空间中定义了吗?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      你必须这样做

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

      【讨论】:

        【解决方案4】:

        您初始化 LastID 的问题在于它位于您声明它的命名空间之外。把它放在同一个命名空间中,它就可以工作了。

        【讨论】:

          猜你喜欢
          • 2015-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-18
          • 2023-03-18
          • 2021-10-21
          相关资源
          最近更新 更多