Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 14 su 14
  1. #11
    No infatti, era giusto anche come hai scritto tu (è del tutto equivalente)
    L'ho fatto , compilato ed eseguito: come ti avevo già detto devi mettere tutta la classe template nello stesso file , se lo fai funziona tutto
    (assicurati di cancellare i makefile ed altri file temporanei creati almomento della compilazione)

  2. #12
    Ok, mi arrendo, si deve mettere tutto in un unico file come suggerivi .
    Ora funziona, ho solamente un altro desiderio....il mio main funzionante è:

    codice:
    int main(int argc, char** argv) {
    
        
        Film* prova=new Film("I pirati della silicon valley", "mbarooz");
        
        Node<Film> nuovo(prova);
        cout <<nuovo.getElement()->getTitolo();
        
        return 0;
    }
    Per gestire i metodi meglio in altri esercizi mi sono trovato bene utilizzando solo puntatori, cioè per intenderci vorrei cambiare in:

    codice:
    int main(int argc, char** argv) {
    
        
        Film* prova=new Film("I pirati della silicon valley", "mbarooz");
        
        Node<Film>* nuovo(prova);                          //METTO PUNTATORE
        cout <<nuovo.getElement()->getTitolo();
        
        return 0;
    }
    Solo che in questo caso mi dà errore di conversione.....è impossibile avere anche quello come puntatore?

    codice:
    main.cpp:27:28: error: cannot convert ‘Film*’ to ‘Node<Film>*’ in initialization
    P.S Per cancellare i makefile eccetera basta vare clean and build da Netbeans vero?

  3. #13
    Sisi basta quello.. Comunque,
    Ora non posso andare al computer e provare a compilare, però penso che tu debba fare qualcosa del genere

    codice:
    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;
    }

    Ps:
    Fra l'altro, in Node secondo me next non dovrebbe puntare a un film, ma ad un altro Node, se no come fai ad accedere a tutti gli elementi?
    È una domanda sincera, nel senso che davvero non capisco come intendi fare, se me lo spieghi magari mi apri un nuovo mondo

    Inoltre devi (per forza) implementare assegnamento e costruttore di copia, altrimenti lui fa la copia bit a bit
    Pps:
    Fammi sapere se così riesci ad usare node come puntatore

  4. #14
    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--;
          }
          
       }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.