Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Errore passaggio parametri con array di record
Forum - C/C++ - Errore passaggio parametri con array di record

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 19:17
Giovedì, 23/10/2014
Codice sorgente - presumibilmente C#

  1. void menu();//procedura menu
  2. int choose();//procedura scelta
  3. void gestione(int *c,int scelta,t_Dati *datianagrafici[]);//procedura che gestisce la banca dati
  4. void inserisci_dati(int *c,t_Dati *datianagrafici[]);//procedura che inserisci i dati dei clienti nella banca dati
  5. void ricerca_cognome(int *c,t_Dati *datianagrafici[]);//procedura che ricerca un cliente in base al cognome
  6.  
  7. /*Programma Principale*/
  8. int main(int argc,char ** argv)
  9. {
  10.     t_Dati datianagrafici[max];//array di record
  11.     int scelta;//variabile scelta
  12.     int c=0;//contatore dei clienti inseriti
  13.  
  14.     printf("\t\t\t--BANCA DATI STUDIO DENTISTICO--");
  15.     printf("\t\t\tPROGRAMMA REALIZZATO DA TOMMASO PERILLI");
  16.  
  17.     do{
  18.  
  19.     menu();//procedura menu
  20.     scelta = choose();//procedura scelta
  21.     gestione(&c,scelta,&datianagrafici );//procedura che gestisce la banca dati
  22.     system("cls");//cancella lo schermo
  23.     }while(scelta!=3);//cicla fin quando non usciamo 3=exit
  24.  
  25.     printf("\t\t\tPROGRAMMA REALIZZATO DA TOMMASO PERILLI");
  26.  
  27.     system("PAUSE");
  28.     return(0);
  29. }


ho messo solo un pezzo di codice perchè mi sembra inutile inserirlo tutto dato che l'errore è presente solo in questo pezzo. Innanzitutto datianagrafici è un array di record, voglio passarlo per riferimento ma mi da errore:
cannot convert `t_Dati (*)[100]' to `t_Dati**' for argument `3' to `void gestione(int*, int, t_Dati**)' ù
qualcuno potrebbe darmi una mano? grazie 8-|

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 7:31
Venerdì, 24/10/2014
Dovrebbe essere

void gestione(int *c, int scelta, t_Dati *datianagrafici);

e quindi la chiamata

gestione(&c, scelta, datianagrafici);


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 15:33
Venerdì, 24/10/2014
Ho provato ma nulla, stesso errore

PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 15:54
Venerdì, 24/10/2014
il problema sembra scomparire quando tolgo dal prototipo l' "*" diventando così:
void gestione(int *c, int scelta, t_Dati datianagrafici);
ma sembra che poi cambi proprio il senso, giusto?
mentre quando vado poi a sviluppare la procedura, è così:
void gestione(int *c, int scelta, t_Dati *datianagrafici){
----
return;
}

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:34
Venerdì, 24/10/2014
Cosa è t_Dati ? Se non lo mostri non si può capire ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 17:42
Venerdì, 24/10/2014
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define max 100
  5.  
  6. /*Variabili Globali*/
  7. //Record contenente i campi per l'importo
  8. typedef struct recImporti
  9.  {
  10.    float importo1;
  11.    float importo2;
  12.    float importo3;
  13.  }t_Importo;
  14.  
  15. //Record contenente i campi per le prestazioni
  16. typedef struct recPrestazioni
  17.  {
  18.    char Prestazioni1[20];
  19.    char Prestazioni2[20];
  20.    char Prestazioni3[20];
  21.  }t_Prestazioni;
  22. //Record contenente i campi per la data di nascita
  23. typedef struct recDatidiNascita
  24.  {
  25.      int Giorno;
  26.      char Mese[10];
  27.      int Anno;
  28.  }t_Data;
  29. //record contenente i dati anagrafici RECORD PRINCIPALE
  30. typedef struct recDatiAnagrafici
  31.  {
  32.     char Nome [12];
  33.     char Cognome [12];
  34.     char Telefono [9];
  35.     t_Data Nascita;//record nascita composto da 3 campi
  36.     t_Prestazioni prestazioni;//record prestazioni composto da 3 campi
  37.     t_Importo importo;//record importo composta da 3 campi
  38.  }t_Dati;
  39.  
  40. /*Prototipi Procedure*/
  41.  
  42. void menu();//procedura menu
  43. int choose();//procedura scelta
  44. void gestione(int *c,int scelta,t_Dati *datianagrafici[]);//procedura che gestisce la banca dati
  45. void inserisci_dati(int *c,t_Dati *datianagrafici[]);//procedura che inserisci i dati dei clienti nella banca dati
  46. void ricerca_cognome(int *c,t_Dati *datianagrafici[]);//procedura che ricerca un cliente in base al cognome
  47.  
  48. /*Programma Principale*/
  49. int main(int argc,char ** argv)
  50. {
  51.     t_Dati datianagrafici[max];//array di record
  52.     int scelta;//variabile scelta
  53.     int c=0;//contatore dei clienti inseriti
  54.  
  55.     printf("\t\t\t--BANCA DATI STUDIO DENTISTICO--");
  56.     printf("\t\t\tPROGRAMMA REALIZZATO DA TOMMASO PERILLI");
  57.  
  58.     do{
  59.  
  60.     menu();//procedura menu
  61.     scelta = choose();//procedura scelta
  62.     gestione(&c,scelta,&datianagrafici);//procedura che gestisce la banca dati
  63.     system("cls");//cancella lo schermo
  64.     }while(scelta!=3);//cicla fin quando non usciamo 5=exit
  65.  
  66.     printf("\t\t\tPROGRAMMA REALIZZATO DA TOMMASO PERILLI");
  67.  
  68.     system("PAUSE");
  69.     return(0);
  70. }


adesso è più chiaro?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:25
Venerdì, 24/10/2014
Ti confermo che deve essere così

void gestione(int *c, int scelta, t_Dati *datianagrafici);

e la chiamata

gestione(&c, scelta, datianagrafici);


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 15:23
Sabato, 25/10/2014
Testo quotato

Postato originariamente da nessuno:

Ti confermo che deve essere così

void gestione(int *c, int scelta, t_Dati *datianagrafici);

e la chiamata

gestione(&c, scelta, datianagrafici);


Ok ho risolto, penso che mi provocavano fastidio le parentesi []
comunque, esiste un modo per stampare un record in una botta sola? senza scrivere esplicitamente tutti i campi?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:04
Sabato, 25/10/2014
Scusami ma io ti avevo già detto nella prima risposta di togliere le parentesi quadre ...

No non puoi visualizzare tutta la struttura

Ultima modifica effettuata da nessuno il 25/10/2014 alle 18:05


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo