Urca, si non ci avevo pensato, così funziona...... 
Si ma setNext() io lo vorrei fare puntare ad un Node, non so se la sintassi è sbagliata, ma così in:
codice:
template<typename T>
void Node<T>::setNext(T* succ){next=succ;}
Io non posso passare come parametro un Node<Film>? Cioè io pensavo che il T* indica qualunque genere.
Altra cosa, ho grandi problemi nel main con la lista linkata, devo includere chiaramente il file "LinkedList.hpp" nel main vero? Perchè per la creazione del nodo senza includere il Node.hpp è riuscito a fare tutto....cmq riporto anche l' header della lista:
codice:
#ifndef LINKEDLIST_HPP
#define LINKEDLIST_HPP
#include "Node.hpp"
#include <string>
#include <stdio.h>
using namespace std;
template <typename E>
class LinkedList
{
protected:
Node<E>* head;
Node<E>* tail;
int size;
public:
LinkedList();
~LinkedList();
void setHead(E* n);
E* getHead();
void setTail(E* n);
E* getTail();
int getSize();
void addNode(E* element);
void deleteNode();
};
#endif /* LINKEDLIST_HPP */
template <typename E>
LinkedList<E>::LinkedList()
{
head=NULL;
size=0;
}
template <typename E>
LinkedList<E>::~LinkedList(){
delete head;
}
template <typename E>
void LinkedList<E>::setHead(E* n){head=n;}
template <typename E>
E* LinkedList<E>::getHead(){return head;}
template <typename E>
void LinkedList<E>::setTail(E* n){tail=n;}
template <typename E>
E* LinkedList<E>::getTail(){return tail;}
template <typename E>
int LinkedList<E>::getSize(){return size;}
template<typename E>
void LinkedList<E>::addNode(E* element){
Node<E> *nuovo=new Node<E>(element);
if(size==0)
{
head=nuovo;
}
else
{
nuovo->setNext(head);
head=nuovo;
}
size++;
}
template<typename E>
void LinkedList<E>::deleteNode(){
if(size>0)
{
Node<E>* tmp=getHead();
Node<E>* succ=tmp->getNext();
head=succ;
delete tmp;
//delete succ;
size--;
}
}
Se nel main provo a scrivere:
codice:
#include <cstdlib>
#include "LinkedList.hpp"
#include "Film.hpp"
#include <iostream>
//#include "Node.hpp"
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
/* Film* prova=new Film("I pirati della silicon valley", "mbarooz");
Node<Film>* nuovo = new Node<Film>(prova); //il puntatore si inizializza così
cout <<nuovo->getElement()->getTitolo();
return 0;*/
Film* prova=new Film("I pirati della silicon valley", "mbarooz");
Node<Film>* nuovo = new Node<Film>(prova);
LinkedList<Node>* list=new LinkedList<Node>();
}
codice:
LinkedList<Node>* list=new LinkedList<Node>();
Ho come errore
codice:
main.cpp:33:20: error: type/value mismatch at argument 1 in template parameter list for ‘template<class E> class LinkedList’
e qualcun altro.
Stavo pensando di implementare la lista così, senza template, ma chiaramente scrivendo head e tail solo come Node senza specificare nel Node un template mi dà errore.
codice:
#ifndef LINKEDLIST_HPP
#define LINKEDLIST_HPP
#include "Node.hpp"
#include <string>
#include <stdio.h>
using namespace std;
class LinkedList
{
protected:
Node* head;
Node* tail;
int size;
public:
LinkedList();
~LinkedList();
void setHead(Node* n);
Node* getHead();
void setTail(Node* n);
Node* getTail();
int getSize();
void addNode(Node* element);
void deleteNode();
};
#endif /* LINKEDLIST_HPP */
LinkedList::LinkedList()
{
head=NULL;
size=0;
}
LinkedList::~LinkedList(){
delete head;
}
void LinkedList::setHead(Node* n){head=n;}
Node* LinkedList::getHead(){return head;}
void LinkedList::setTail(Node* n){tail=n;}
Node* LinkedList::getTail(){return tail;}
int LinkedList::getSize(){return size;}
void LinkedList::addNode(Node* element){
Node *nuovo=new Node(element);
if(size==0)
{
head=nuovo;
}
else
{
nuovo->setNext(head);
head=nuovo;
}
size++;
}
void LinkedList::deleteNode(){
if(size>0)
{
Node* tmp=getHead();
Node* succ=tmp->getNext();
head=succ;
delete tmp;
//delete succ;
size--;
}
}