Вот, собственно, проблема.
Объявление класса:
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]; // ссылка на головной элемент
}
VS2013 выдаёт
error C4716: Queue::tail: должна возвращать значение
error C4716: Queue::head: должна возвращать значение
Вот полный код шаблона:
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]; // Ссылка на хвостовой элемент
}
};