Problema lista

di
Anonimizzato7097
il
3 risposte

Problema lista

Salve,
ho un problema con una lista in c++;
gli elementi della lista contengono svariati campi tra cui una data e dovrei, inserendo una data da tastiera stampare a video l'elemento il cui campo di data è immediatamente successivo.
Ho creato un ciclo for che mi permette di scorrere la lista e modifica il valore di due puntatori in modo che alla fine del ciclo stesso uno (chiamato q) punti l'elemento che ha il campo di data successivo a quello inserito (quello da stampare a video) e l'altro puntatore (chiamato p) che punta l'elemento precedente...
Quello che non capisco è perchè non posso, assegnato a q l'indirizzo dell'elemento della lista da stampare a video, scrivere :

cout << q->elem.data
oppure
cout << (*q).elem.data

ma devo prima fare un'operazione come la seguente
e=*p

dove "e" è ovviamente una variabile del tipo puntato da p.

Qualche delucidazion?
Grazie in anticipo!

3 Risposte

  • Re: Problema lista

    Potresti allegare un pezzo di codice più significativo?


    Saluti,
    Max
  • Re: Problema lista

    #include <iostream>
    using namespace std;
    struct orario
    {
    int anno;
    short int mese;
    short int giorno;
    short int ore;
    };
    
    struct appuntamento
    {
    char titolo[50];
    orario ora;
    appuntamento* succ;
    };
    
    typedef appuntamento* lista;
    
    bool anteriore(lista a, appuntamento b)
    {
    if(a->ora.anno > b.ora.anno) return false;
    else if(b.ora.anno > a->ora.anno) return true; 
    else if(a->ora.mese > b.ora.mese) return false;
    else if(b.ora.mese > a->ora.mese) return true; 
    else if(a->ora.giorno > b.ora.giorno) return false;
    else if (b.ora.giorno > a->ora.giorno) return true;
    else if (((*a).ora.ore) >= (b.ora.ore)) return false;
    else if(b.ora.ore < a->ora.ore) return true;
    }
    void trova_appuntamento_per_data(lista& inizio, appuntamento e)
    {
    lista p=0,q;
    for(q=inizio;q!=0 && anteriore(q,e);q=q->succ) p=q;
    if(q==0)cout << "Non ci sono appuntamenti!" << endl;
    else
    {
    e=*q;
    cout << "Il primo appuntamento successivo alla data e all'ora inserite e': "
    << e.titolo << endl;
    cout << "e' fissato per il giorno: " << e.ora.giorno << "-" << e.ora.mese << "-"
    << e.ora.anno << endl;
    cout << "alle ore: " << e.ora.ore << endl;
    }
    }
    Il codice utile è quello sopra in particolare la seconda funzione trova_appuntamento; non capisco perchè sia necessario scrivere "
    e=*q
    ", non dovrebbe funzionare anche dereferenziando direttamente il puntatore???
    *p
  • Re: Problema lista

    
        cout << q->titolo << endl;
        cout << q->ora.anno << endl;
    
    Perchè dici che non ti funziona? Che messaggio ti da il compilatore?

    ~Max~
Devi accedere o registrarti per scrivere nel forum
3 risposte