PDA

Visualizza la versione completa : [C++] usare una struct come tipo di un parametro


Kaamos
09-03-2012, 13:53
Posto solo le parti di codice interessate: ho una prima struct Impiegato dove l'unico costruttore che definisco ha dei parametri:


struct Impiegato {
Impiegato( /* parametri */ ) { }
};

e altrove ho una funzione che prende un parametro di tipo Impiegato per riferimento costante:


funzione(const Impiegato& i) { }

Quest'ultima riga causa un errore di compilazione che dice di non trovare il costruttore senza argomenti di Impiegato (giusto, non l'ho definito). Ma perché è necessario fornirlo per usare la relativa struct come tipo di un parametro?
Nel mio caso l'ho volutamente omesso perché non mi sembrava sensato un Impiegato senza nome, cognome e altri dati (tutte cose per le quali non esiste un "valore di default"), ma oltre a questo vorrei sapere il perché di questa necessità.

Devo per forza usare i puntatori?

Ho cercato sul web e sul forum ma non ho trovato nulla, forse cerco le parole sbagliate.

Grazie.

ramy89
09-03-2012, 16:08
E' perchè usi const a caso:



funzione(Impiegato& i) { }

Kaamos
09-03-2012, 16:44
Originariamente inviato da ramy89
E' perchè usi const a caso:



funzione(Impiegato& i) { }


Non cambia nulla senza il const .
E' errato usare quella dicitura per passare per riferimento qualcosa che non si vuole venga modificato?

Grazie

ramy89
09-03-2012, 17:11
Allora è errato il contesto, cosa che non si può capire se non posti il codice, in particolare l' istruzione dove fai la chiamata a procedura (o funzione).

MItaly
09-03-2012, 18:28
Di base nel codice che hai postato non c'è nulla di sbagliato (e il const lì è corretto), probabilmente il pasticcio sta altrove; prova a postare un esempio completo che presenta il problema.

ramy89
09-03-2012, 18:56
Comunque il tipo di ritorno va specificato:


void funzione(Impiegato& i) { }

Kaamos
09-03-2012, 23:49
Originariamente inviato da ramy89
Comunque il tipo di ritorno va specificato:


void funzione(Impiegato& i) { }


Hai ragione, l'ho solo dimenticato nel copia e incolla.

Comunque ho risolto, il messaggio del compilatore era illusorio... la firma della funzione che ho postato guarda caso era proprio la prima linea di codice del file, ma in realtà l'errore era nell'header che includevo, dove dichiaravo una variabile di tipo Impiegato senza inizializzarla... da tutt'altra parte insomma.

Userò un puntatore, grazie mille per le risposte.

Loading