ciao ragazzi, ho creato la classe coda con puntatori utilizzando anche la libreria standard assert.h, dopo di che ho creato un pezzo di codice per provare se la classe è stata creata correttamente ma alla chiamata del metodo fuoricoda() fallisce l'asserto quando questo non dovrebbe succedere. come mai??? posto i codici della classe e per la prova:
codap.h
provacoda.cppcodice:#ifndef _CODAP_H #define _CODAP_H #include <cstdlib> #include <iostream> #include <assert.h> using namespace std; typedef int tipoelem; class coda { private: struct node { struct node* precedente; tipoelem elemento; struct node* successivo; }; public: typedef node* nodo; nodo testa; nodo fondo; coda(); bool codavuota(); tipoelem leggicoda(); void incoda(tipoelem); void fuoricoda(); }; coda::coda() { testa = NULL; fondo = NULL; } bool coda::codavuota() { return((testa == NULL) && (fondo == NULL)); } tipoelem coda::leggicoda() { return(testa->elemento); } void coda::incoda(tipoelem elem) { nodo tmp = new node; tmp->elemento = elem; tmp->precedente = NULL; tmp->successivo = fondo; fondo = tmp; } void coda::fuoricoda() { assert((testa != NULL) && (fondo != NULL)); nodo tmp = testa; if(testa == fondo) { testa = NULL; fondo = NULL; } else { testa = testa->precedente; testa->successivo = NULL; } delete tmp; } #endif
codice:#include <cstdlib> #include <iostream> #include "codap.h" using namespace std; int main(int argc, char *argv[]) { coda queue; queue.incoda(6); queue.incoda(3); queue.fuoricoda(); queue.incoda(9); while(!queue.codavuota()) { cout << queue.leggicoda() << " "; queue.fuoricoda(); } cout << "\n\n"; system("PAUSE"); return EXIT_SUCCESS; }

Rispondi quotando