Answer the question
In order to leave comments, you need to log in
Problem with template class methods. How to decide?
Here, in fact, is the problem.
Class declaration:
template <class T>
class Queue
{
public:
virtual void enqueue(const T & e) {}; //Добавление элемента в очередь
virtual void dequeue(){}; //Удаление элемента из головы очереди
virtual void empty(){}; //Проверка на пустоту очереди
virtual T & tail(){}; //Ссылка на хвост
virtual T & head(){}; //Ссылка на голову
};
T & tail()
{
if (nCount == 0) throw QueueUnderflow();
return elements[pTail]; // Ссылка на хвостовой элемент
}
T & head()
{
if (nCount == 0) throw QueueUnderflow();
return elements[pHead]; // ссылка на головной элемент
}
template <class T>
class Queue
{
public:
virtual void enqueue(const T & e) {}; //Добавление элемента в очередь
virtual void dequeue(){}; //Удаление элемента из головы очереди
virtual void empty(){}; //Проверка на пустоту очереди
virtual T & tail(){}; //Ссылка на хвост
virtual T & head(){}; //Ссылка на голову
};
template <class T>
class BoundQueue : public Queue < T >
{
T *elements; // Массив элементов очереди
int maxSize; // Количество элементов в массиве
int pHead; // Индекс первого элемента
int pTail; // Индекс последнего элемента
int nCount; // Количество элементов
public:
BoundQueue(int size = 10);
BoundQueue(const BoundQueue<T> & scr);
virtual ~BoundQueue() { delete[] elements; }
void enqueue(const T & item)
{
if (nCount == maxSize) throw QueueOverflow();
if (++pTail == maxSize) pTail = 0;
elements[pTail] = item;
nCount++;
}
void dequeue()
{
if (nCount == 0) throw QueueUnderflow();
if (++pHead == maxSize) pHead = 0;
nCount--;
}
bool empty() const { return nCount == 0; }
//Доступ к головному элементу очереди
T & head()
{
if (nCount == 0) throw QueueUnderflow();
return elements[pHead]; // ссылка на головной элемент
}
//Доступ к хвостовому элементу
T & tail()
{
if (nCount == 0) throw QueueUnderflow();
return elements[pTail]; // Ссылка на хвостовой элемент
}
};
Answer the question
In order to leave comments, you need to log in
You have assigned an empty body to all methods in the class - of course the compiler swears.
UPD: make them purely virtual then.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question