Saturday, 15 May 2010

C++ overriding error with abstract templated class -



C++ overriding error with abstract templated class -

i'm trying build custom list implementation (for exercise purpose). have created implementation cursors , usual 1 pointers (circular doubly-linked list). don't want create different generic functions (print list, natural merge sort, etc.) in difference class used). created abstract class pure virtual methods utilize interface. used conditional compilation deal different implementation of position type (an int in cursor implementation , pointer node in circular doubly-linked list). have these errors:

overriding 'cella<t>* lista<t>::primolista() const [with t = char; lista<t>::posizione = cella<char>*]' overriding 'cella<t>* lista<t>::primolista() const [with t = char*; lista<t>::posizione = cella<char*>*]' overriding 'cella<t>* lista<t>::primolista() const [with t = float; lista<t>::posizione = cella<float>*]' overriding 'cella<t>* lista<t>::primolista() const [with t = int; lista<t>::posizione = cella<int>*]'

i'll write main files.

lista.h

#ifdef use_cursor #include "cella.h" #else #include "cellalp.h" #endif template <class t> class lista { public: #ifdef use_cursor typedef int posizione; #else typedef cella<t>* posizione; #endif virtual void inslista(t elem, posizione p) = 0; virtual void canclista(posizione p) = 0; virtual bool listavuota() const = 0; virtual t leggilista(posizione p) const = 0; virtual void scrivilista(t elem, posizione p) = 0; virtual posizione primolista() const = 0; virtual bool finelista(posizione p) const = 0; virtual posizione succlista(posizione p) const = 0; //virtual posizione predlista(posizione p) const = 0; };

cellalp.h

template <class t> class cella { public: typedef t tipoelem; cella(); cella(tipoelem); void setelemento(tipoelem); tipoelem getelemento() const; void setsucc(cella*); cella* getsucc() const; void setprec(cella*); cella* getprec() const; bool operator ==(cella); private: tipoelem elemento; cella* prec; cella* succ; }; // implementazione della classe cellalista // -------------------------------------- // costruttori template <class t> cella<t>::cella() {} template <class t> cella<t>::cella(tipoelem e) { elemento = e; } template <class t> void cella<t>::setelemento(tipoelem label) { elemento = label; } template <class t> t cella<t>::getelemento() const { homecoming elemento; } template <class t> void cella<t>::setsucc(cella<t>* p) { succ=p; } template <class t> cella<t>* cella<t>::getsucc() const { homecoming succ; } template <class t> void cella<t>::setprec(cella<t>* p) { prec=p; } template <class t> cella<t>* cella<t>::getprec() const { homecoming prec; } // sovraccarico dell'operatore == template <class t> bool cella<t>::operator==(cella<t> cella) { homecoming (getelemento == cella.getelemento); }

listap.h

#include "lista.h" #include <iostream> using namespace std; template<class t> class circlista : public lista<t> { public: circlista(); ~circlista(); // circlista(const circlista<t>&); /* posizione è united nations puntatore cella */ typedef cella<t>* posizione; typedef t tipoelem; /* prototipi degli operatori */ void crealista(); bool listavuota() const; tipoelem leggilista(posizione) const; void scrivilista(tipoelem, posizione); posizione primolista() const; bool finelista(posizione) const; posizione succlista(posizione) const; posizione preclista(posizione) const; void inslista(tipoelem,posizione); void canclista(posizione); // funzioni di servizio private: posizione lista; //la lista è united nations puntatore advertisement oggetto cella }; /* liste: rappresentazione collegata circolare (con sentinella) * realizzata mediante doppi puntatori (o simmetrica) */ template <class t> circlista<t>::circlista() {crealista();} template <class t> circlista<t>::~circlista() { while (lista->getsucc() != lista->getprec()) { cella<t>* posizione = lista->getsucc(); canclista(posizione); } delete lista; } template <class t> void circlista<t>::crealista() { t elementonullo; lista = new cella<t>; lista->setelemento(elementonullo); lista->setsucc(lista); lista->setprec(lista); //la sentinella punta se stessa } template <class t> bool circlista<t>::listavuota() const { homecoming ((lista->getsucc() == lista) && (lista->getprec()==lista)); } template <class t> cella<t>* circlista<t>::primolista() const { homecoming lista->getsucc(); } template <class t> cella<t>* circlista<t>::succlista(posizione p) const { homecoming p->getsucc(); } template <class t> cella<t>* circlista<t>::preclista(posizione p) const { homecoming p->getprec(); } template <class t> bool circlista<t>::finelista(posizione p) const { homecoming (p==lista); } template <class t> t circlista<t>::leggilista(posizione p) const { homecoming p->getelemento(); } template <class t> void circlista<t>::scrivilista(tipoelem a, posizione p) { p->setelemento(a); } template <class t> void circlista<t>::inslista(tipoelem a, posizione p) { cella<t>* temp = new cella<t>; temp->setelemento(a); temp->setprec(p->getprec()); temp->setsucc(p); (p->getprec())->setsucc(temp); p->setprec(temp); p=temp; // se p era la posizione dell'elemento n-mo, adesso lo è temp } template <class t> void circlista<t>::canclista(posizione p) { cella<t>* temp = new cella<t>; temp=p; (p->getsucc())->setprec(p->getprec()); (p->getprec())->setsucc(p->getsucc()); p=p->getsucc(); delete(temp); }

sorry language used in code comments (it's italian).

could explain me how deal these errors?

i "solved" issue creating project folder in eclipse-cdt , importing files needed in specific test (the testmain.cpp uses abstract class lista, derived class circlista , not listacursori, don't need both of them in same project). checked many times #include statements in old project folder , nil seemed wrong. think maybe eclipse messes during compile or linkage process (using both listacursori , circlista, override errors appears). there no makefile analyze farther investigation in debug or release folders, since utilize cdt internal builder in tool chain editor settings (source: where makefile generated eclipse cdt). anyway wouldn't surprised, because it's not first time eclipse "strange" things on windows (if fault). trying help me if main question not clear.

c++ compiler-errors

No comments:

Post a Comment