Passaggio struttura per indirizzo

di il
4 risposte

Passaggio struttura per indirizzo

Ciao a tutti/e,
sto scrivendo un programmino che legge una data da tastiera e restituisce la data del giorno successivo.
Questo è il codice "incriminato":

//definizione della struttura data
struct data{
       int giorno;
       int mese;
       int anno;
};
       
//prototipi delle funzioni
void inserimentoData(struct data* k);
bool controllaData(struct data d);
bool bisestile(int anno);
void domani(struct data* d);
void stampaData(struct data f);

/*---------------------------------------------------------------
               MAIN
---------------------------------------------------------------*/
main(){
       struct data g;
       cout << "INPUT" << endl << "-----";
       inserimentoData(&g);
       domani(&g);
       cout << endl <<"OUTPUT" << endl << "------" << endl;
       stampaData(g);
       system("pause");
}

/*---------------------------------------------------------------
               FUNZIONI
---------------------------------------------------------------*/

//funzione inserimentoData
void inserimentoData(struct data* k){      
       do{       
            cout << endl;
            cout << "Inserisci giorno: ";
            cin >> k->giorno;
            cout << "Inserisci mese: ";
            cin >> k->mese;
            cout << "Inserisci anno: ";
            cin >> k->anno;    
       }
       while (controllaData(k) == false);
}

/*---------------------------------------------------------------*/

//funzione controllaData
bool controllaData(struct data j){         
       if(j.giorno<0 || j.giorno >31 || 
         ((j.mese==4 || j.mese==6 || j.mese==9 || j.mese==11) && j.giorno ==31) ||
         (j.mese==2 && bisestile(j.anno)==true && j.giorno==30) || 
         (j.mese==2 && bisestile(j.anno)==false && j.giorno==29)){
           cout << "DATA SBAGLIATA!!" << endl;
           return false;  
       }
       else
           return true;  
}

):

alla riga relativa all'istruzione (nella funzione inserimentoData()):
while (controllaData(k) == false);
il compilatore mi da il seguente errore:
in function 'void inserimentoData(data*)':
conversion from 'data*' to non-scalar type ' data' requested

qualcuno mi può spiegare il perché?

Cmq ho risolto il problema modificando la funzione inserimentoData() in questo modo:

//funzione inserimentoData
void inserimentoData(struct data* f){      
     struct data k;     
       do{       
            cout << endl;
            cout << "Inserisci giorno: ";
            cin >> k.giorno;
            cout << "Inserisci mese: ";
            cin >> k.mese;
            cout << "Inserisci anno: ";
            cin >> k.anno;    
       }
       while (controllaData(k) == false);
       *f=k;
}

4 Risposte

  • Re: Passaggio struttura per indirizzo

    Quella cosa che hai fatto nella funzione di inserimento è sbagliata perché così hai restituito una variabile locale che sarà distrutta all'uscita.

    Era corretto prima solo che anche la controlladata doveva accettare un puntatore a struttura

    bool controllaData(struct data *j){
  • Re: Passaggio struttura per indirizzo

    oregon ha scritto:


    Quella cosa che hai fatto nella funzione di inserimento è sbagliata perché così hai restituito una variabile locale che sarà distrutta all'uscita.
    "Quella cosa" cosa? non capisco a quale parte del codice della funzione ti riferisci? la funzione inserimentoData è di tipo void, non restituisce niente....
  • Re: Passaggio struttura per indirizzo

    oregon ha scritto:


    Era corretto prima solo che anche la controlladata doveva accettare un puntatore a struttura

    bool controllaData(struct data *j){
    scusa oregon ti dispiace correggere il mio codice e inserirlo come risposta? non riesco a venirci fuori...grazie
  • Re: Passaggio struttura per indirizzo

    Ok sistemato, grazie
Devi accedere o registrarti per scrivere nel forum
4 risposte