Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C++] Problema con classi e tipi

    Devo creare una linkedlist con nodi che contengano oggetti di tipo Film, in Java sarebbe ammissibile una cosa come:

    codice:
    public class LinkedList<Node>
    {
    .
    .
    }
    codice:
    public class Node<Film>
    {
    .
    .
    }
    Qui invece ho errori...riporto la classe Film e la lista con la classe Node:

    Film.hpp

    codice:
    #ifndef FILM_HPP
    #define	FILM_HPP
    
    
    //#include <stdio.h>
    //#include <string.h>
    
    using namespace std;
    
    class Film
    {
            protected:
                string Titolo;
                string Regista;
                int annouscita;
                bool isRemake;
                string Originale;
         
                
            public:
                Film(string Titolo, string Regista, bool isRemake);
               ~Film();
               
               void setOriginale(string Originale);
               void setTitolo(string valore);
               void setRegista(string valore);
               void setAnnouscita(int valore);
               void setRemake(bool valore);
               string getTitolo();
               string getRegista();
               int getAnnouscita();
               bool isRemake();
               string getOriginale();
    };
    
    
    
    #endif	/* FILM_HPP */
    LinkedList.hpp:

    codice:
    #ifndef LINKEDLIST_HPP
    #define	LINKEDLIST_HPP
    
    #include "Node.hpp"
    
    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 newNode);
               void deleteNode(Node toRemove);
              
               
    };
    
    
    
    #endif	/* LINKEDLIST_HPP */
    Node.hpp dove ci sono problemi:

    codice:
    #ifndef NODE_HPP
    #define	NODE_HPP
    
    
    #include <stdio.h>
    #include "Film.hpp"
    
    using namespace std;
    
    class Node  <Film>
    {
            protected:
                string film;
                string copie;
                Node* next;
                
            public:
                Node(Film element, string copie);
                ~Node();
        
        
               
               void setFilm(<Film> film);
               void setNext(Node * next);
               void setCopie(string aggiornamento);
               Node* getNext();
               <Film> getFilm();
               string getCopie();
    };
    
    
    
    
    #endif	/* NODE_HPP */
    I problemi sono tutti nelle istruzioni con Film, errore unable to resolve identifier.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    In C++ i template funzionano in maniera diversa.

    codice:
    template <class Ty> 
    class Node
    {
            protected:
                string film;
                string copie;
                Node* next;
                
            public:
                Node(Ty element, string copie);
                ~Node();
        
        
               
               void setFilm(Ty film);
               void setNext(Node * next);
               void setCopie(string aggiornamento);
               Node* getNext();
               Ty getFilm();
               string getCopie();
    };
    
    ...
    
    template <class Tx> class LinkedList 
    {
            protected:
                typedef Node<Tx> Node;
    
                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 newNode);
               void deleteNode(Node toRemove);
              
               
    };
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Quindi anche se cosģ non ho errori non va bene?

    codice:
    #ifndef NODE_HPP
    #define	NODE_HPP
    
    
    #include <stdio.h>
    #include "Film.hpp"
    
    using namespace std;
    
    class Node 
    {
            protected:
                Film film;
                string copie;
                Node* next;
                
            public:
                Node(Film element, string copie);
                ~Node();
        
        
               
               void setFilm(Film object);
               void setNext(Node * next);
               void setCopie(string aggiornamento);
               Node* getNext();
               Film getFilm();
               string getCopie();
    };
    
    
    
    
    #endif	/* NODE_HPP */

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Cosģ si.
    E' la sintassi che avevi usato a non andare bene:
    codice:
    class Node  <Film>
    Una sintassi del genere puoi averla solo con un template nella forma che ho postato.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Quindi anche in questo secondo modo i Node saranno di "tipo" film anche come li ho scritti io?
    Ti ringrazio.

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Si. Il tipo Node conterrą solo dati di tipo Film, pertanto la LinkedList conterrą dei Node di tipo Film e puoi eliminare il: template <class Ty> dalle dichiarazioni. Ovviamente perderai un po' di flessibilitą sul riuso delle classi, ma puoi pensarci in un secondo momento se ti serve.

    A prescindere da questo, la sintassi per i template che ho postato č obbligatoria se vuoi rendere il dato generico (non so come funzioni in Java, ma in C++ č cosģ).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    Ah perfetto, al momento ho deciso di tenere i template, vedrņ dopo il da farsi....ho un altro problemino. Praticamente vorrei fare una classe Distributore, implementata come lista linkata, questo č l' header.

    codice:
    using namespace std;
    #include <vector>
    #include "LinkedList.hpp"
    #include "Film.hpp"
    
    
    class Distributore
    {
            protected:
                
                      LinkedList distributore;
                
            public:
                      Distributore();
                     ~Distributore();
                     
                     
            public:
                
                void InserisciFilm(Film f, unsigned int copie);
                void EliminaFilm(Film f);
                Film EsceFilm(Film f);
                void RitornaFilm(Film f);
                string CopieFilm(Film f);
                vector<Film> ListaFilmPerAnno(unsigned int a);
                vector<Film> ListaRemake();
                bool search(string titolo, string attori, string regista);
                
            
    
    
    };
    
    #endif	/* DISTRIBUTORE_HPP */
    Sto cercando di implementarlo, ma nei metodi ho un problemino:

    codice:
    #include "Distributore.hpp"
    
                      Distributore:: Distributore(){
                        distributore=new LinkedList();
                      }
                      
                      Distributore::~Distributore(){
                          
                      }
                     
                      
                
                void Distributore:: InserisciFilm(Film f, unsigned int copie){distributore.addNode
                void EliminaFilm(Film f);
                Film EsceFilm(Film f);
                void RitornaFilm(Film f);
                string CopieFilm(Film f);
                vector<Film> ListaFilmPerAnno(unsigned int a);
                vector<Film> ListaRemake();
                bool search(string titolo, string attori, string regista);
    In questo modo al primo metodo non funziona quello che voglio fare, cioč invocare un metodo di LinkedList che ho scritto in un file a parte sia come header che come .cpp. Solo che non funziona questa istruzione, come faccio a utilizzare una linkedlist che ho dichiarato e costruito nel costruttore di distributore?

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Ti serve un puntatore (o meglio uno smart pointer. Che compilatore usi?)
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Uso cygwin......quindi del tipo: LinkedList distributore*;

  10. #10
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Quasi:
    codice:
    LinkedList* distributore;
    Ricorda che C++ non ha GC come Java, perciņ la cancellazione del puntatore č a tuo carico (per quello avevo suggerito lo smart pointer).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.