Template abliten von abstrakter (template)-klasse
-
Hallo,
ich stosse wieder auf probleme beim erstellen meiner Templates.
Ich habe mirt eine abstrakte (template)-Klasse erstellt und leite davon eine andere ab. leider bekomme ich immer einen Fehler, den ich nicht weg bekomme.template <class T> class TVertexBuffer { protected: T* pVertices; unsigned int iVertices; public: TVertexBuffer(); virtual unsigned int create(unsigned int iVertices, unsigned char iVertexSize, DWORD iVertexFormat) = 0; virtual void *lock(unsigned int iOffset, unsigned int iSize, DWORD iLockFlags)= 0; virtual void unlock() = 0; };davon leite ich nun eine klasse ab:
template <class T> class TDXVertexBuffer : public TVertexBuffer<T> { public: TDXVertexBuffer(); virtual HRESULT create(unsigned int iVertices, DWORD iVertexFormat); virtual void *lock(unsigned int iOffset, unsigned int iSize, DWORD iLockFlags) { int i = 10;} virtual void unlock() { int i = 10;} }; template <class T> HRESULT TDXVertexBuffer<T>::create(unsigned int iVertices, DWORD iVertexFormat) { // .....Code .... }
-
..
wenn ich nun (in meinem hauptprogramm
) mittelsTDXVertexBuffer<cVertexTex> oVB;
versuche eine Instanz zu erzeugen, bekomme ich immer die Fehlermeldung:
error C2259: 'TDXVertexBuffer<T>': Instanz von abstrakter Klasse kann nicht erstellt werden with [ T=cVertexTex ]verstehe ich nicht. die klasse TDXVertexBuffer ist doch die abgeleitete. und da sind alle funktionen implementiert; also keine abstakte klasse.
was mache ich falsch?
-
was ist mit
virtual unsigned int create(unsigned int iVertices, unsigned char iVertexSize, DWORD iVertexFormat) = 0;
-
hatte das noch aus versehen im code wegen den vielen änderungn und hin/her-kopiereri drin.
habs schon geändert, gibt aber immer noch den fehler.lustig ist es wenn ich nun nur das
: public TVertexBuffer<T>aus der Zeile
class TDXVertexBuffer : public TVertexBuffer<T>wegnehme. funktioniert es. sobald ich ableite nimmer.
-
template <class T> class TVertexBuffer { protected: DWORD iFVFFormat; T* pVertices; unsigned int iVertices; //unsigned char iVertexSize, iColorSize; public: TVertexBuffer(); virtual unsigned int create(unsigned int iVertices, unsigned char iVertexSize, DWORD iVertexFormat) = 0; virtual void *lock(unsigned int iOffset, unsigned int iSize, DWORD iLockFlags)= 0; virtual void unlock() = 0; }; template <class T> class TDXVertexBuffer : public TVertexBuffer<T> { public: TDXVertexBuffer() {} virtual unsigned int create(unsigned int iVertices, DWORD iVertexFormat); virtual void *lock(unsigned int iOffset, unsigned int iSize, DWORD iLockFlags) { int i = 10; return(NULL); } virtual void unlock() { int i = 10;} }; template <class T> unsigned int TDXVertexBuffer<T>::create(unsigned int iVertices, DWORD iVertexFormat) { /* HRESULT iErrorCode; this->iFVFFormat = iVertexFormat; unsigned int iSize = iVertexSize * iVertices; if (pVertices != NULL) delete[] pVertices; pVertices = new T[iVertices]; //pColors = new unsigned char[iVertices * iColorSize]; this->iVertices = iVertices; iErrorCode = ((cDX_Device *)pGfxDevice)->pDevice->CreateVertexBuffer(iSize, D3DUSAGE_WRITEONLY, iVertexFormat, D3DPOOL_MANAGED, &oVB, NULL ); return(iErrorCode);*/ return(0); }im Hauptprogramm dann:
TDXVertexBuffer<cVertexTex> oVB;
-
virtual unsigned int create(unsigned int iVertices, unsigned char iVertexSize, DWORD iVertexFormat) = 0; ... virtual unsigned int create(unsigned int iVertices, DWORD iVertexFormat);Was fällt dir auf?
-
arggs ich däm.......
hab ich irgendwie völlig übersehen.
danke dir für die schnelle hilfe