• Advertisement
Sign in to follow this  

Linked List Pointer Problem

This topic is 4005 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello I have a problem with a linkedlist that I made a while ago and it worked fine, but now the compiler says "cannot convert parameter 1 from 'Mana *' to 'Mana **'" but I didn't change the code and I don't know what the error means. I would appriciate some help, thanks. ************************************************************** main.cpp 1> lltest\linkedlist.h(43) : error C2664: 'Node<T>::Node(T *)' : cannot convert parameter 1 from 'Mana *' to 'Mana **' 1> with 1> [ 1> T=Mana * 1> ] 1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 1> lltest\linkedlist.h(42) : while compiling class template member function 'bool LinkedList<T>::addFirst(T)' 1> with 1> [ 1> T=Mana * 1> ] 1> lltest\main.cpp(7) : see reference to class template instantiation 'LinkedList<T>' being compiled 1> with 1> [ 1> T=Mana * 1> ] 1>Mana.cpp ******************************************' And here is the code: Main.cpp
#include "Mana.h"
#include "LinkedList.h"

int main()
{
	LinkedList<Mana*> *mana;
	mana = new LinkedList<Mana*>();

	mana->addFirst( new Mana() );
}


Mana.h
#ifndef MANA_H
#define MANA_H

class Mana{
public:
	Mana()
	{
		nr = 0;
	}
	int nr;
};

#endif

Node.h
#ifndef NODE_H
#define NODE_H

template<class T>
class Node
{
public:
     
     T *data;
     Node<T> *next;
     Node();
     Node(T *theData)
     {
          data = theData;
          next = NULL;
     }
     
     ~Node()
     {
          delete data;
     }
};

#endif

LinkedList.h
#ifndef LINKEDLIST_H
#define LINKEDLIST_H

#include "Node.h"

template<class T>
class LinkedList
{
private:
     int nrOfElements;
     Node<T> *first;
public:
     LinkedList()
     {
          first = NULL;
          nrOfElements = 0;
     }
     
     ~LinkedList()
     {
          while (!isEmpty())
          {
			deleteElementAt(0);
          }
	 }
     
	 int getSize()
     {
          return nrOfElements;
     }
     
     
     bool isEmpty()
     {
          return nrOfElements == 0;
     }
     
     bool LinkedList<T>::addFirst(T data)
     {
          Node<T> *temp = new Node<T>(data);
          
          temp->next = first;
          first = temp;
          
          nrOfElements++;
          return true;
     }
     
     
     bool LinkedList<T>::addElementAt(int index, T data)
     {
          if(index>nrOfElements || isEmpty())
          {
               return false;
          }
          
          Node<T> *temp = new Node<T>(data);
          Node<T> *walker = first;
          if(index==0)
          {
               first = temp;
               temp->next = walker;
          }
          else{
               for(int i=1;i<index;i++){
                    walker = walker->next;
               }
          
          temp->next = walker->next;
          walker->next = temp;     
          }
          
          nrOfElements++;
          
          return true;
     }
     
     bool LinkedList<T>::deleteElementAt(int index)
     {
          if(index > nrOfElements || isEmpty())
          {
               return false;
          }
          
          Node<T> *temp;
          
          if(index==0)
          {
               temp = first;
               first = first->next;
          }
          else 
          {
               Node<T> *walker = first;
               for(int i = 1;i<index;i++)
               {
                    walker = walker->next;
               }
               temp = walker->next;
               walker->next = temp->next;
          }
          
          delete temp;
          nrOfElements--;
          
          return true;
     }
     

     bool LinkedList<T>::deleteElement(T data)
     {
          Node<T> *walker = first;
          Node<T> *temp;
          
          if(first->data == data)
          {
               temp = first;
               first = first->next;
          }
          else
          {
               while(data != walker->next->data && walker->next != NULL)
               {
                    walker = walker->next;
               }
               temp = walker->next;
               walker->next = temp->next;
          }
          
          delete temp;
          nrOfElements--;
          return true;
     }
     

     T LinkedList<T>::getAt(int index)
     {
          if(index>=nrOfElements || isEmpty())
          {
               return NULL;
          }
          
          Node<T> *walker = first;
          
          for(int i=0;i<index;i++)
          {
               walker = walker->next;
          }
          return walker->data;
     }
     

     bool LinkedList<T>::setAt(int index, T data)
     {
          if(index>=nrOfElements || isEmpty())
          {
               return false;
          }
          Node<T> *walker = first;
          for(int i = 0;i<index;i++)
          {
               walker = walker->next;
          }
          walker->data = data;
          return true;
     }
};

#endif


Share this post


Link to post
Share on other sites
Advertisement
Node<SomeType>::data == SomeType*
Node<Sometype*>::data == SomeType**

I strongly suggest using the standard library list (std::list) instead.

Share this post


Link to post
Share on other sites
Well I found one error:


Node(T *theData)
{
data = theData;
next = NULL;
}







bool LinkedList<T>::addFirst(T data)
{
Node<T> *temp = new Node<T>(data);

temp->next = first;
first = temp;

nrOfElements++;
return true;
}





You are passing T to the constructor of Node. The constructor however expects a T*. If T is Node* then you see the error makes perfect sense since T* = Mana** T = Mana*.


Quote:

I strongly suggest using the standard library list (std::list) instead.


QFE. Don't know if you are perhaps only doing this as an exercise, but using std for the end product is a better option than homegrown in almost all cases [smile]

Share this post


Link to post
Share on other sites
Moved to For Beginners.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement