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
codice:
#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
provacoda.cpp
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;
}