Я хочу иметь простой класс, представляющий объект с уникальным идентификатором. Каждый новый объект получает идентификатор выше, чем ранее созданный. Важно отметить, что идентификатор для каждого объекта является постоянным, поэтому я обязан использовать список инициализации. По какой-то причине я получаю сообщение об ошибке undefined: Неопределенная ссылка на Test :: ID.Использование статического члена класса в качестве параметра в списке инициализации
class Test
{
const int m_id;
static int ID;
public:
Test() : m_id(ID++)
{
cout << "Created object with id: " << m_id << endl;
}
};
- Почему это?
- Как я могу это исправить?
- Как я могу убедиться, что идентификатор предварительно инициализирован 0, поэтому я не увеличиваю неинициализированную переменную?
Не стоит использовать переменные во всех прописных буквах – Slava
Эй, спасибо за совет ... Но почему? Это из-за общего способа именования констант, используя только верхний регистр или есть какая-то другая причина? –
Именование констант с использованием прописных букв также является антипаттерном, которое исходит от создания констант с использованием препроцессора. Имя столкновения с препроцессором трудно поймать и сложно поддерживать, поэтому либо создание констант C++ и переменных в верхнем регистре - это не очень хорошая идея. – Slava