Здравствуйте, INsideR, Вы писали:
INR>INR>#include <list>
INR>class CBaseObject
INR>{
INR>private:
INR> static std::list<CBaseObject *> liveObjects;
INR> long nRefCount;
INR>protected:
INR> CBaseObject();
INR> virtual ~CBaseObject();
INR>};
INR>CBaseObject::CBaseObject()
INR>{
INR> liveObjects.push_back(this);
INR> nRefCount = 0;
INR>};
INR>CBaseObject::~CBaseObject()
INR>{
INR>};
INR>
INR>Почему не компилируется этот код? Выдаёт такую ошибку
INR>MemoryManager error LNK2001: unresolved external symbol "private: static class _STL::list<class CBaseObject *,class _STL::allocator<class CBaseObject *> > CBaseObject::liveObjects" (?liveObjects@CBaseObject@@0V?$list@PAVCBaseObject@@V?$allocator@PAVCBaseObject@@@_STL@@@_STL@@A)
INR>Пользуюсь STLPort, и VC 7.0
Для определения (и инициализации) статической переменной в реализацию класса вставьте такую строку:
std::list<CBaseObject *> CBaseObject::liveObjects;
В итоге получится что-то вроде:
#include <list>
class CBaseObject
{
private:
static std::list<CBaseObject *> liveObjects;
long nRefCount;
protected:
CBaseObject();
virtual ~CBaseObject();
};
CBaseObject::CBaseObject()
{
liveObjects.push_back(this);
nRefCount = 0;
};
CBaseObject::~CBaseObject()
{
};
std::list<CBaseObject *> CBaseObject::liveObjects;