使用静态类成员作为初始化列表

时间:2015-11-17 19:52:34

标签: c++ list class static member

我希望有一个简单的类来表示具有唯一ID的对象。每个新对象的ID都高于先前创建的ID。需要注意的重要一点是每个对象的id都是常量,所以我不得不使用初始化列表。由于某种原因,我得到一个关于未定义引用的错误:对Test :: ID的未定义引用。

class Test
{
    const int m_id;
    static int ID;
public:
    Test() : m_id(ID++)
    {
        cout << "Created object with id: " << m_id << endl;
    }
};
  1. 这是为什么?
  2. 我该如何解决这个问题?
  3. 如何确保ID预先初始化为0,所以我不会增加未初始化的变量?

1 个答案:

答案 0 :(得分:2)

您需要在一个翻译单元中为静态保留存储空间。然后你初始化它。所以你需要写

int Test::ID = 0;

在你的一个源文件中。

考虑将类型更改为std::atomic<int>.这样做可以提高代码的线程安全性。