Re: Template class as static property problem
On May 5, 9:54 am, Michal M <mich.mier...@gmail.com> wrote:
Hi
I have been trying to write a class which could serve as a cache
manager for objects.
file Cache.h
-------------------
class CachedObject;
template<typename T>
class Cache {
public:
unsigned int cache_size;
unsigned int cache_counter;
CachedObject **objects_cache;
Cache() {
this->cache_size = 5;
objects_cache = new CachedObject*[this-=
cache_size];
};
CachedObject *GetInstance() {
//return new T();
if (this->cache_counter > 0) {
return objects_cache[--ca=
che_counter];
} else {
return new T();
}
}
void AddCacheOrFree(CachedObject *o) { delete o; }
virtual ~Cache() {delete [] objects_cache;}
};
file CachedObject.h
----------------------------
#include "Cache.h"
class CachedObject {
public:
static Cache<CachedObject> myCache;
CachedObject() {};
void Destroy() {
CachedObject::myCache.AddCacheOrFree(this=
);
}
virtual ~CachedObject() {};
};
file main.cpp
------------------
#include "CachedObject.h"
int main(int argc, char* argv[]) {
CachedObject *myCachedObject = CachedObject::myCache.Ge=
tInstance();
myCachedObject->Destroy();
return 0;
}
It does not compile and gives linker error "main.o:main.cpp:(.text
+0xf): undefined reference to `CachedObject::myCache'".
If I uncomment //return new T(); in GetInstance it compiles without
errors.
I can't figure out what I am doing wrong. Could you help?
Well, you have declared myCache as a static variable in CachedObject,
but have never defined it. In some .C file you need:
CachedObject::myCache;
--
Fred