使用静态 class 成员作为初始化列表中的参数
Using a static class member as a parameter in initialise list
我想要一个简单的 class 来表示具有唯一 ID 的对象。每个新对象都会获得一个比之前创建的对象更高的 ID。需要注意的重要一点是每个对象的 id 都是常量,所以我不得不使用初始化列表。出于某种原因,我收到有关未定义引用的错误:Undefined reference to Test::ID.
class Test
{
const int m_id;
static int ID;
public:
Test() : m_id(ID++)
{
cout << "Created object with id: " << m_id << endl;
}
};
- 这是为什么?
- 我该如何解决这个问题?
- 如何确保 ID 预初始化为 0,这样我就不会增加未初始化的变量?
您需要为一个翻译单元中的静态保留存储空间。然后你初始化它。所以你需要写
int Test::ID = 0;
在您的一个源文件中。
考虑将类型更改为 std::atomic<int>.
这样做会提高代码的线程安全性。
我想要一个简单的 class 来表示具有唯一 ID 的对象。每个新对象都会获得一个比之前创建的对象更高的 ID。需要注意的重要一点是每个对象的 id 都是常量,所以我不得不使用初始化列表。出于某种原因,我收到有关未定义引用的错误:Undefined reference to Test::ID.
class Test
{
const int m_id;
static int ID;
public:
Test() : m_id(ID++)
{
cout << "Created object with id: " << m_id << endl;
}
};
- 这是为什么?
- 我该如何解决这个问题?
- 如何确保 ID 预初始化为 0,这样我就不会增加未初始化的变量?
您需要为一个翻译单元中的静态保留存储空间。然后你初始化它。所以你需要写
int Test::ID = 0;
在您的一个源文件中。
考虑将类型更改为 std::atomic<int>.
这样做会提高代码的线程安全性。