ciao a tutti, ho creato la struttura dati insieme con una lista non ordinata. nel test dei metodi dell'insieme mi dà un errore nella struttura insiemel.h. posto i codici
insieme.h
insiemel.hcodice:#ifndef insieme_h #define insieme_h #include<iostream> #include<stdlib.h> using namespace std; template<class tipoelem> class insieme { public: virtual void creainsieme() = 0; virtual bool insiemevuoto() = 0; virtual bool appartiene(tipoelem) = 0; virtual void inserisci(tipoelem) = 0; virtual void cancella(tipoelem) = 0; //virtual void unione(insieme<tipoelem> *, insieme<tipoelem> *) = 0; //virtual void intersezione(insieme<tipoelem> *, insieme<tipoelem> *) = 0; //virtual void differenza(insieme<tipoelem> *, insieme<tipoelem> *) = 0; void test(); }; #endif template<class tipoelem> void insieme<tipoelem>::test() { cout << " ***test del metodo CREAINSIEME***\n\n"; cout << "il metodo CREAINSIEME crea un insieme privo di elementi. per provare il metodo\n"; cout << "basta utilizzare il metodo INSIEMEVUOTO.\n\n"; cout << " insiemevuoto() = " << this->insiemevuoto() << "\n\n"; system("pause"); system("cls"); cout << " ***test del metodo INSIEMEVUOTO***\n\n"; cout << "il metodo INSIEMEVUOTO testa se l'insieme e' privo o meno di elementi.\n\n"; cout << " test del metodo su insieme privo di elementi:\n"; cout << " insiemevuoto() = " << this->insiemevuoto() << "\n"; cout << " test del metodo su insieme con almeno un elemento:\n"; cout << " inserimento di un valore nell'insieme: a = "; tipoelem a; cin >> a; this->inserisci(a); cout << " insiemevuoto() = " << this->insiemevuoto() << "\n\n"; system("pause"); system("cls"); cout << " ***test del metodo APPARTIENE***\n\n"; cout << "il metodo APPARTIENE testa se il valore fornito come argomento e' presente\n"; cout << "o meno tra i valori dell'insieme.\n\n"; cout << " test con esito positivo:\n"; cout << " appartiene(a) = " << this->appartiene(a) << "\n"; cout << " test con esito negativo:\n"; cout << " b = "; tipoelem b; cin >> b; cout << " appartiene(b) = " << this->appartiene(b) << "\n\n"; system("pause"); system("cls"); }
testinsieme.cppcodice:#ifndef insiemel_h #define insiemel_h #include<iostream> #include<stdlib.h> #include "listap.h" //#include "insieme.h" using namespace std; template<class tipoelem> class insiemel : public insieme<tipoelem> { public: insiemel(); void creainsieme(); bool insiemevuoto(); bool appartiene(tipoelem); void inserisci(tipoelem); void cancella(tipoelem); void unione(&insiemel<tipoelem>, &insiemel<tipoelem>); void intersezione(&insiemel, &insiemel); void differenza(&insiemel, &insiemel); tipoelem getelem(typename listap<tipoelem>::posizione); typename listap<tipoelem>::posizione getsuc(typename listap<tipoelem>::posizione); typename listap<tipoelem>::posizione primo(); int card; private: listap<tipoelem> *set; }; #endif template<class tipoelem> tipoelem insiemel<tipoelem>::getelem(typename listap<tipoelem>::posizione pos) { return(set->leggilista(pos)); } template<class tipoelem> typename listap<tipoelem>::posizione insiemel<tipoelem>::getsuc(typename listap<tipoelem>::posizione pos) { return(set->suclista(pos)); } template<class tipoelem> typename listap<tipoelem>::posizione insiemel<tipoelem>::primo() { return(set->primolista()); } template<class tipoelem> insiemel<tipoelem>::insiemel() { this->creainsieme(); } template<class tipoelem> void insiemel<tipoelem>::creainsieme() { set = new listap<tipoelem>; card = 0; } template<class tipoelem> bool insiemel<tipoelem>::insiemevuoto() { return(set->listavuota()); } template<class tipoelem> bool insiemel<tipoelem>::appartiene(tipoelem elem) { typename listap<tipoelem>::posizione p = set->primolista(); bool trovato = false; while(!set->finelista(p) && !trovato) { if(set->leggilista(p) == elem) trovato = true; else p = set->suclista(p); } return trovato; } template<class tipoelem> void insiemel<tipoelem>::inserisci(tipoelem elem) { if(!this->appartiene(elem)) set->inslista(set->primolista(), elem); card++; } template<class tipoelem> void insiemel<tipoelem>::cancella(tipoelem elem) { typename listap<tipoelem>::posizione p = set->primolista(); bool trovato = false; while(!set->finelista(p) && !trovato) { if(this->getelem(p) == elem) { set->canclista(p); trovato = true; card--; } else p = set->suclista(p); } } template<class tipoelem> void insiemel<tipoelem>::unione(insiemel<tipoelem>::insiemel &A, insiemel<tipoelem>::insiemel &B) { typename listap<tipoelem>::posizione p = A.primolista(); int cardA = A.card; while(cardA > 0) { this->inserisci(A.getelem(p)); p = A.getsuc(p); cardA--; } p = B.primo(); int cardB = B.card; while(cardB > 0) { this->inserisci(B.getelem(p)); p = B.getsuc(p); cardB--; } } template<class tipoelem> void insiemel<tipoelem>::intersezione(insiemel<tipoelem> &A, insiemel<tipoelem> &B) { typename listap<tipoelem>::posizione p = A.primo(); int cardA = A.card; while(cardA > 0) { if(B.appartiene(A.getelem(p))) this->inserisci(A.getelem(p)); p = A.getsuc(p); cardA--; } } template<class tipoelem> void insiemel<tipoelem>::differenza(insiemel<tipoelem> &A, insiemel<tipoelem> &B) { typename listap<tipoelem>::posizione p = A.primo(); int cardA = A.card; while(cardA > 0) { if(!B.appartiene(A.getelem(p))) this->inserisci(A.getelem(p)); p = A.getsuc(p); cardA--; } }
l'errore che mi viene visualizzato è il seguente:codice:#include "insieme.h" #include "insiemev.h" #include "insiemel.h" #include<iostream> #include<stdlib.h> using namespace std; int main() { cout << " ***test insieme con vettore***\n\n"; int dim = 10; insiemev<int> ins(dim); ins.inserisci(2); ins.test(); cout << " ***test metodo UNIONE***\n\n"; cout << "ins = {"; ins.visualizzains(); cout << "}\n"; int dim2 = 5; insiemev<int> ins2(dim2); ins2.inserisci(4); ins2.inserisci(2); cout << "ins2 = {"; ins2.visualizzains(); cout << "}\n"; int card3 = dim + dim2; insiemev<int> ins3(card3); cout << "ins3 = unione(ins, ins2) = {"; ins3.unione(ins, ins2); ins3.visualizzains(); cout << "}\n\n"; cout << " ***test metodo INTERSEZIONE***\n\n"; int dim4 = dim; insiemev<int> ins4(dim4); ins4.intersezione(ins, ins2); cout << "ins4 = intersezione(ins, ins2) = {"; ins4.visualizzains(); cout << "}\n\n"; cout << " ***test metodo DIFFERENZA***\n\n"; int dim5 = dim; insiemev<int> ins5(dim5); ins5.differenza(ins, ins2); cout << "ins5 = differenza(ins, ins2) = {"; ins5.visualizzains(); cout << "}\n\n"; system("pause"); return 0; }
21 C:\Dev-Cpp\Strutture\Insiemi\insiemel.h variable or field `unione' declared void
lo so che il metodo unione non restituisce nessun valore. perchè me lo ricorda e me lo segnala come errore?

Rispondi quotando