2011-12-06 75 views
1

我不知道如何初始化一个静态类成员而不创建这个类的对象。 这里是我的代码:C++初始化和修改一个静态类成员

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

待办事项这在你的cpp文件中:

unsigned CPassant::LastID = 0; 

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

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

+0

哦谢谢!我已经尝试过,但是我在main()中写了它。 它现在有效 – Carvallegro

+0

@Hahuha:你在名字空间中定义了它吗? –

3

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

namespace { 
/* ... */  

    unsigned CPassant::LastID = 0; 

}; // anonym namespace 
0

你要做的

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

0

与LastID初始化的问题是,这是你声明的名称空间的外它。把它放在相同的命名空间,它会工作。