Ho creato un programma in C++, che dovrebbe simulare un videonoleggio, la cosa strana č che dopo aver implementato una lista linkata, che sarebbe la mia struttura per il distributore, se invoco i metodi creando una LinkedList tutto funziona perfettamente, se invece creo una classe Distributore che altro non č che una linkedList che utilizza quei metodi, nell' invocare certe funzioni il programma va in loop oppure l' esecuzione fallisce, e non riesco a spiegarmi il perchč!!
Riporto l' header di LinkedList e e di Distributore con il cpp di Distributore:
codice:#ifndef LINKEDLIST_HPP #define LINKEDLIST_HPP #include "Node.hpp" #include <string> #include <stdio.h> #include <vector> #include "Tokenizer.hpp" using namespace std; class LinkedList { protected: Node* header; Node* trailer; int size; public: LinkedList(); ~LinkedList(); int getSize(); Node* isPresent(Film* f); void addNode(Film* element,unsigned n); void removeNode(Film* toRemove); Film* exitFilm(Film* f); void returnFilm(Film* f); string copieFilm(Film* f); vector<Film*> ListaFilmPerAnno(unsigned a); vector<Film*> ListaRemake(); string search(string word, int mode); string listaCompleta(); }; #endif /* LINKEDLIST_HPP */codice:#ifndef DISTRIBUTORE_HPP #define DISTRIBUTORE_HPP #include "LinkedList.hpp" using namespace std; class Distributore { protected: LinkedList* distributore; int size; public: Distributore(); ~Distributore(); int getSize(); void InserisciFilm(Film* f, unsigned c); void EliminaFilm(Film* film); Film* EsceFilm(Film* f); void RitornaFilm(Film* f); string CopieFilm(Film* f); vector<Film*> ListaFilmPerAnno(unsigned a); vector<Film*> ListaRemake(); string search(string word, int mode); string listaCompleta(); }; #endif /* DISTRIBUTORE_HPP */
codice:#include "Distributore.hpp" Distributore::Distributore(){ distributore=new LinkedList(); size=0; } Distributore::~Distributore(){ // delete distributore; } int Distributore::getSize(){distributore->getSize();} void Distributore::InserisciFilm(Film* f, unsigned c){distributore->addNode(f,c);} void Distributore::EliminaFilm(Film* film){distributore->removeNode(film);} Film* Distributore::EsceFilm(Film* f){distributore->exitFilm(f);} void Distributore::RitornaFilm(Film* f){distributore->returnFilm(f);} string Distributore::CopieFilm(Film* f){distributore->copieFilm(f);} vector<Film*> Distributore::ListaFilmPerAnno(unsigned a){distributore->ListaFilmPerAnno(a);} vector<Film*> Distributore::ListaRemake(){distributore->ListaRemake();} string Distributore::search(string word, int mode){distributore->search(word, mode);} string Distributore::listaCompleta(){distributore->listaCompleta();}
Ma l' esecuzione del main fallisce cosģ:
Ecco cosa fa copieFilm:codice:include <cstdlib> #include "LinkedList.hpp" #include <stdio.h> #include <iostream> #include "Node.hpp" #include "Distributore.hpp" using namespace std; /* * */ int main(int argc, char** argv) { Film* prova=new Film("I pirati della silicon valley", "mbarooz"); prova->setAnnoUscita(1989); Distributore *distr=new Distributore(); distr->InserisciFilm(prova, 5); cout << distr->CopieFilm(prova); }
Se al posto di Distributore uso un oggetto LinkedList funziona, com' č possibile?codice:string LinkedList::copieFilm(Film* f){ Node* tmp=isPresent(f); string toReturn; stringstream out; if(tmp!=NULL) { out << tmp->getElement()->getCopieTotali(); toReturn+='h'+out.str()+", "; out.str(""); out << tmp->getElement()->getCopiePresenti(); toReturn+=out.str()+'i'; return toReturn; } return toReturn="h0, 0i"; }

Rispondi quotando