初始化和修改静态类成员
C++ - Initialize and modify a static class member
我不知道如何初始化静态类成员而不创建该类的对象。下面是我的代码:
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的问题在于它位于您声明的名称空间之外。把它放在相同的命名空间中,就可以了。
相关文章:
- 使用静态成员声明类时遇到问题
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 从相同类型的静态成员进行类内初始化
- 是否通过单元化指针UB访问静态类成员
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 从静态成员函数访问私有非静态类变量 - C++
- 在子类中填充静态类成员
- 作为成员的静态类模板实例会导致未解析的外部符号错误
- uninit_member:非静态类成员字段 m_cJobState.bstatus 未在此构造函数中初始化,也不在其调
- uninit_member:非静态类成员m_wszParams未在此构造函数中初始化,也不在它C++中调用的任何函数中初
- 说明通过指针访问非静态类成员函数
- 静态类数据成员的线程安全
- 具有静态成员的类的前向声明
- 枚举不是非静态数据成员或类的基类
- 静态类成员的使用
- 静态类成员不是与 this 指针没有关联吗?
- 使用静态类成员而不是私有字段之间的速度差异是什么?
- 如何在 Visual Studio 中显示模板的静态类成员
- 即使没有析构函数,非静态类成员也会被销毁吗?
- 静态模板函数访问静态类成员