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;
}