PAPAmidNIHGT
PAPAmidNIHGT

Reputation: 7

problems with implementing deque with templates

Recently I have tried to implement sequel using templates. Here is result

#pragma once
#include <iostream>
using namespace std;

template<typename Type>
struct Node {
    Node();
    Node<Type>* next = NULL;
    Node<Type>* prev = NULL;
    Type data;
};

template<typename Type>
class deque{
 private:
     Node<Type>* front = NULL;
     Node<Type>* back = NULL;

 public:
     deque(Type key);
     ~deque();
     Node<Type>* back();
     Node<Type>* front();
     int size();
     bool empty();
     void push_front(Type key);
     void push_back(Type key);
     void pop_front();
     void pop_back();
     void print_in_order();
};


 template<typename Type>
  deque<Type>::deque(Type key)
{
     if (front != NULL || back != NULL)
         return
     else
     {
         front = new Node<Type>();
         front->data = key;
         prev = front;
     }
}

 template<typename Type>
  deque<Type>::~deque()
{
     Node<Type>* delPtr;
     while (front->prev != NULL)
    {
         delPtr = front;
         cout << "Deleted " << front->data<<endl;
         front = front->prev;
         delete delPtr;

    }
     back = NULL;
     delete front;
}

 template<typename Type>
  Node<Type>* deque<Type>::back()
{
      if(back!= NULL)
         return back;
     else 
          return NULL
}

 template<class Type>
  Node<Type>* deque<Type>::front()
{
     return front;
}

 template<typename Type>
  int deque<Type>::size()
{
     int counter = 0;
     Node<Type>* temp = front;
     while (temp->back != NULL)
    {
         counter++;
         temp = temp->back;
    }
     return counter;
}

 template<typename Type>
  bool deque<Type>::empty()
{
     if (front == NULL && back == NULL)
         return true;
     else
         return false;
}

 template<typename Type>
  void deque<Type>::push_front(Type key)
{
     Node<Type>* temp = new Node<Type>();
     temp->data = key;
     temp->prev = front;
     front->next = temp;
     front = temp;
}

 template<typename Type>
  void deque<Type>::push_back(Type key)
{
     Node<Type>* temp = new Node<Type>();
     temp->data = key;
     temp->next = back;
     back->prev = temp;
     back = temp;
}

 template<typename Type>
 inline void deque<Type>::pop_front()
{
     if (front != NULL) {
         Node<Type>* delPtr = front;
         front = front->prev;
         front->next = NULL;
         delete delPtr;
    }
     else
         cout << "There is no front in empty deque" << endl;
}

 template<typename Type>
  void deque<Type>::pop_back()
{
     if (back != NULL) {
         Node<Type>* delPtr = back;
         back = back->next;
         back->prev = NULL;
         delete delPtr;
    }
     else
         cout << "There is no back in empty deque " << endl;
}

 template<typename Type>
  void deque<Type>::print_in_order()
{
     if (front == NULL)
         return;
     Node<Type> temp = front;
     while (temp->prev != NULL) {
         cout << temp->data << " ";
         temp = temp->prev;
    }
     cout << endl;
}

 template<typename Type>
 inline Node<Type>::Node()
{
}

Then some code to check whether it is working

int main(){
    deque<int> qq(1);
    qq.push_front(2);
    qq.push_front(3);
    qq.print_in_order();
    return 0;
}

This code doesn't want to compile. I have tried looking for similar project or bugs and couldn't find anything useful. Therefore it would be great if someone could explain what is going wrong. Most of errors are the same. For instance it is not allowed to use back() or front() because they are not functions and not a static members. Or back() and front() as members of template of class can't receive type of function. Hope someone can help.

Upvotes: 0

Views: 219

Answers (1)

enyard
enyard

Reputation: 174

There are a conflict between

Node<Type>* front = NULL;
Node<Type>* back = NULL;

and

Node<Type>* back();
Node<Type>* front();

So first of all change Node<Type>* front = NULL; to Node<Type>* m_front = NULL; and the same to back. There are another errors on your code, for example

Node<Type> temp = front;

have to be

Node<Type>* temp = front;

Finally, you can see the code without compilation errors on ideone

Good Lucky!

Upvotes: 2

Related Questions