Re: Проблема компиляции со static
От: Russov Украина  
Дата: 24.07.03 06:20
Оценка:
Здравствуйте, 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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.