2013-07-25 3 views
0

У меня есть класс, который содержит два частных int, один - const (m_id), а другой - static (next_id).Как я могу автоматически увеличивать каждый объект класса?

Я хочу установить m_id для next_id и увеличивать next_id каждый раз, когда я создаю объект класса.

Но так как это константный я не могу установить его так:

Class::Class() 
{ 
m_id = next_id++; 
} 

Мне нужно установить его как то

Class::Class() :m_id(next_id) 
{ 
next_id++; 
} 

Но это не очень хорошо, потому что я не могу доступ частный статический, как это.

Кто-то сказал мне, что const не намерен использоваться для этого, поэтому просто удалите его. Это действительно единственное решение?

редактировать: здесь полный заголовок и источник

заголовка

#ifndef ENTITY_H_LEA12OED 
#define ENTITY_H_LEA12OED 

#include "EntityKey.h" 
#include "ComponentManager.h" 
class Entity 
{ 
public: 
    Entity(); 
    virtual ~Entity(); 

private: 
    ekey m_key; 
    ComponentManager m_componentManager; 
    const int m_id; 
    static int next_id; 
}; 

#endif /* end of include guard: ENTITY_H_LEA12OED */ 

источник

#include "Entity.h" 

Entity::Entity() :m_id(next_id++) 
{ 

} 

Entity::~Entity() 
{ 
} 

(конечно EntityKey и ComponentManager не имеет ничего общего с моим вопросом)

(править 2: исправлены некоторые ошибки в коде из-за тестирования)

+1

Что вы подразумеваете под «Я не могу получить доступ к частному статику»? Возможно, вам следует опубликовать полный пример кода. – Casey

ответ

2

Необходимо определить next_id, иначе оно будет скомпилировано, , но не ссылка. Вроде так:

class Class 
{ 
    /* whatever */ 
}; 

Class::Class() :m_id(next_id++) 
{ 
    /* whatever */ 
} 

int Class::next_id = 0; 
+0

спасибо, что (объявление next_id 0), не думал, что это может привести к этому – eephyne

+0

Это сработало для меня - зачем это нужно? – Vince

Смежные вопросы