Classe Lista con template
ragazzi ho un problema di compilazione per quanto riguarda questo programma che realizza una lista trattata come un vettore . Vi posto il file .h
testando la classe nel main , l'unico errore di compilazione è il seguente :
C:\Users\hp\Desktop\Lista con Vettore\cella.h|130|error: request for member `setElemento' in `((lista*)this)->lista::listone[(p - 1)]', which is of non-class type `int'| ...Non riesco a venirne a capo
Praticamente è un errore nella funzione " insLista(tipoelem,posizione) "
#ifndef _CELLA_H #define _CELLA_H using namespace std; template <class T > class cella { public: typedef T tipoelem; cella(); void setElemento(tipoelem); tipoelem getElemento(); private: tipoelem elemento; }; template <class T > cella <T > :: cella () {} ; template<class T> void cella <T>::setElemento(tipoelem x) { elemento = x ; } template<class T> T cella<T>:: getElemento() { return elemento; } //////////////////////////////////////////////////////// const int DIM = 200; typedef int posizione; template <class T> class lista { public: typedef T tipoelem; lista(); void creaLista(); bool fineLista(posizione); bool listaVuota(); void scriviLista(tipoelem,posizione); tipoelem leggiLista(posizione); posizione primoLista(); posizione predLista(posizione); posizione succLista(posizione); void insLista(tipoelem,posizione); void cancLista(posizione); private: tipoelem listone[DIM]; int lunghezza; }; template<class T> lista<T>::lista() { creaLista(); } template<class T> void lista<T>:: creaLista() { lunghezza = 0; } template<class T> bool lista<T>::listaVuota() { if(lunghezza==0) return true; } template<class T> void lista<T>::scriviLista(tipoelem elem , posizione p ) { listone[p].setElemento(elem); } template<class T> T lista<T>::leggiLista(posizione p) { return listone[p].getElemento(); } template<class T> bool lista<T>::fineLista(posizione p) { if ( p == lunghezza + 1) return true; } template<class T> posizione lista<T>::primoLista() { return (1); } template<class T> posizione lista<T>::succLista(posizione p) { return (p + 1) ; } template<class T> posizione lista<T>::predLista(posizione p) { return (p - 1) ; } template<class T> void lista<T>::insLista(tipoelem elem,posizione p) { for ( int i= lunghezza ; i>=p; i -- ){ listone[i]= listone[i-1]; listone[p-1].setElemento(elem); lunghezza++ ; } } template<class T> void lista<T>::cancLista(posizione p) { if(!listaVuota()){ for(int i = p - 1 ; i <(lunghezza-1) ; i++ ) { listone[i] = listone[i+1]; lunghezza--; } } } #endif
testando la classe nel main , l'unico errore di compilazione è il seguente :
C:\Users\hp\Desktop\Lista con Vettore\cella.h|130|error: request for member `setElemento' in `((lista
Praticamente è un errore nella funzione " insLista(tipoelem,posizione) "
Risposte
Beh in verità ci sono un bel po' di cose da correggere, non esegui nessun controllo sugli indici ecc. ecc... (comunque può essere che non hai ancora finito di definire la classe).
Per il tuo problema, allora tu prima crei una classe "cella" dotata di alcuni metodi, poi però nella classe lista definisci listone come tipoelem, e poi provi ad usare i metodi di cella tipo getElemento, ma ovviamente così non può funzionare, in realtà dovresti dichiarare listone come un vettore di cella, quindi dovresti fare qualcosa del genere:
cella listone[DIM];
al posto di
tipoelem listone[DIM];
Secondo me è un modo un po' contorto di definire la classe lista, ma probabilmente non ho capito bene come alla fine vuoi strutturare il programma
così ora dovrebbe compilare, torno a ripetere però che dovresti correggere ancora un bel po' di cose...
Per il tuo problema, allora tu prima crei una classe "cella" dotata di alcuni metodi, poi però nella classe lista definisci listone come tipoelem, e poi provi ad usare i metodi di cella tipo getElemento, ma ovviamente così non può funzionare, in realtà dovresti dichiarare listone come un vettore di cella, quindi dovresti fare qualcosa del genere:
cella
al posto di
tipoelem listone[DIM];
Secondo me è un modo un po' contorto di definire la classe lista, ma probabilmente non ho capito bene come alla fine vuoi strutturare il programma

così ora dovrebbe compilare, torno a ripetere però che dovresti correggere ancora un bel po' di cose...
E' verooo ...non ci avevo fatto caso..che svista pazzesca...ti ringrazio

di niente
