Advertisement

Templated Inheritance

Started by June 26, 2002 06:52 PM
1 comment, last by cheeZe gOd 22 years, 5 months ago
Is there a trick to inheritance with templates? I get error C2955: ''ctBag'' : use of class template requires template argument list Here''s the code. ctBag.h, parent
  
template <class theClass>
class ctBag
{
public:
	ctBag();
	ctBag(unsigned int iLength);
	ctBag(unsigned int iLength, theClass fillValue);
	ctBag(unsigned int iLength, theClass* fillValue);
	~ctBag();
	unsigned int getLength();
protected:
	theClass** data;
	unsigned int length;
};

#include "ctBag.h"

//*********************Constructors***************************


template <class theClass>
ctBag<theClass>::ctBag(unsigned int iLength, theClass* fillValue)
: length(iLength), data(new theClass*[iLength])
{
    for (unsigned int i = 0; i < iLength; i++)
    {
        data[i] = new theClass(fillValue);
    }
}

template <class theClass>
ctBag<theClass>::ctBag(unsigned int iLength, theClass fillValue)
: length(iLength), data(new theClass*[iLength])
{
    for (unsigned int i = 0; i < iLength; i++)
    {
        data[i] = new theClass(&fillValue);
    }
}

template <class theClass>
ctBag <theClass>::ctBag() : length(10)
{
	data = new theClass*[length]();
	for (unsigned int i = 0; i < length; i++)
		data[i] = NULL;
}

template <class theClass>
ctBag <theClass>::ctBag(unsigned int iLength) : length (iLength)
{
	data = new theClass*[iLength]();
	for (unsigned int i = 0; i < length; i++)
		data[i] = NULL;
}

//*******************Destructor*********************************


template <class theClass>
ctBag <theClass>::~ctBag()
{
	for (unsigned int i = 0; i < length; i++)
	{
		if (data[i] != NULL) delete data[i];
	}
	delete[] data;
}

template <class theClass>
unsigned int ctBag <theClass>::getLength(){return length;}

  
here''s ctVector.h, the child
  
#ifndef _CTVECTOR_
#define _CTVECTOR_
//#include <stdlib.h>
#include <memory.h>
#include "ctBag.h"




template <class theClass> 
class ctVector:public ctBag
{
public:
	ctVector();
	ctVector(unsigned int iLength);
	ctVector(unsigned int iLength, theClass fillValue);
	ctVector(unsigned int iLength, theClass* fillValue);

	~ctVector();

	theClass* operator[](unsigned int index);
	theClass& operator= (theClass info);
	theClass& operator= (theClass* info);

	void put(unsigned int index, theClass* info);
	void put(unsigned int index, theClass info);
	theClass* get(unsigned int index);
	void remove(unsigned int index);

	unsigned int getLength();
protected:
	//theClass** data;

	//unsigned int length;

};

//*********************Constructors***************************


template <class theClass>
ctVector <theClass>::ctVector() : length(10)
{
	data = new theClass*[length]();
	for (unsigned int i = 0; i < length; i++)
		data[i] = NULL;
}

template <class theClass>
ctVector<theClass>::ctVector(unsigned int iLength, theClass* fillValue)
: length(iLength), data(new theClass*[iLength])
{
    for (unsigned int i = 0; i < iLength; i++)
    {
        data[i] = new theClass(fillValue);
    }
}

template <class theClass>
ctVector<theClass>::ctVector(unsigned int iLength, theClass fillValue)
: length(iLength), data(new theClass*[iLength])
{
    for (unsigned int i = 0; i < iLength; i++)
    {
        data[i] = new theClass(&fillValue);
    }
}

template <class theClass>
ctVector <theClass>::ctVector(unsigned int iLength) : length (iLength)
{
	data = new theClass*[iLength]();
	for (unsigned int i = 0; i < length; i++)
		data[i] = NULL;
}

//*******************Destructor*********************************


template <class theClass>
ctVector <theClass>::~ctVector()
{
	for (unsigned int i = 0; i < length; i++)
	{
		if (data[i] != NULL) delete data[i];
	}
	delete[] data;
}

//*************************Operators*******************************


template <class theClass>
theClass* ctVector <theClass>::operator[](unsigned int index)
{
	if (index >= 0 && index < length && data[index])
		return data[index];
	return NULL;
}

template <class theClass>
theClass& ctVector <theClass>::operator=(theClass info)
{
	

	for (unsigned int i = 0; i < length; i++)
	{
		if (data[i] != NULL) delete data[i];
	}
	delete[] data;

	length = info.length;

	data = new theClass*[info.length];

	for (i = 0; i < info.length; i++)
	{
		data[i] = new theClass(info[i]);
	}
	return *this;
}

template <class theClass>
theClass& ctVector <theClass>::operator=(theClass* info)
{
	

	for (unsigned int i = 0; i < length; i++)
	{
		if (data[i] != NULL) delete data[i];
	}
	delete[] data;

	length = info->length;

	data = new theClass*[info->length];

	for (i = 0; i < info->length; i++)
	{
		data[i] = new theClass((*info)[i]);
	}
	return *this;
}

//***********************Accessors*************************************


template <class theClass>
theClass* ctVector <theClass>::get(unsigned int index)
{
	if (index >= 0 || index < length)
		return data[index];
	return NULL;
}

template <class theClass>
void ctVector <theClass>::put(unsigned int index, theClass* info)
{
	if (index < 0 || index > length)
		return;
	if(data[index])
		delete data[index];
	data[index] = info;
}

template <class theClass>
void ctVector <theClass>::put(unsigned int index, theClass info)
{
	if (index < 0 || index >= length)
		return;
	if(data[index])
		delete data[index];
	data[index] = new theClass(&info);
}

template <class theClass>
void ctVector <theClass>::remove(unsigned int index)
{
	if (index >= 0 && index < length && data[index])
	{
		delete data[index];
		data[index] = NULL;
	}
}

template <class theClass>
unsigned int ctVector <theClass>::getLength(){return length;}

#endif

;
  
Ok, thanks for the help all! A frusterated cheeZe gOd
cheeZe gOd
Which line of code gives you the error?

Try class ctVectorublic ctBag<theClass>

[edited by - IndirectX on June 26, 2002 7:57:09 PM]
---visit #directxdev on afternet <- not just for directx, despite the name
Advertisement
That worked, thanks!

cheeZe gOd
cheeZe gOd

This topic is closed to new replies.

Advertisement