Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Dividere il programma in Header File e Source File
Forum - C/C++ - Dividere il programma in Header File e Source File - Pagina 2

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


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 22:49
Sabato, 09/09/2017
Allora questo è l'header file:
Codice sorgente - presumibilmente C++

  1. #ifndef STRUTTURE_H_
  2. #define STRUTTURE_H_
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <ctype.h>
  8. #include <time.h>
  9. #include <conio.h>
  10.  
  11. /*Inizio Costanti*/
  12.  
  13. /*Costanti per il RecommenderSystem*/
  14. #define UTENTI 5 //costante numero di utenti simili da considerare per il recommender system
  15. #define FILM 3 //numero di film/serie tv da considerare per il recommender system
  16.  
  17. /*Costanti per i file usati*/
  18. #define FILEFILM "Film.txt" /*File che contiene i film della piattaforma*/
  19. #define FILESERIETV "SerieTv.txt" /*File che contiene le serie tv della piattaforma*/
  20. #define FILEUTENTI "Utenti.txt" /*File che contiene gli iscritti della piattaforma*/
  21. #define FILEADMIN "Admin.txt" /*File che contiene le informazioni sugli admin della piattaforma*/
  22. #define FILEPREFERENZE "Preferenze.txt" /*File che contiene le preferenze di ogni utente*/
  23. #define FILELAVORO "Lavoro.txt" /*File di lavoro utile per algoritmi utilizzati nel programma*/
  24. #define FILEFEEDBACK "FeedBack.txt" /*File che contiene le segnalazioni degli utenti*/
  25. #define FILEDISTRIBUZIONE "Distribuzioni.txt" /*File che contiene le distribuzioni cinematografiche*/
  26. #define DOMINIEMAIL "DominiEmail.txt" /*File che contiene i domini email possibili su questa piattaforma*/
  27. #define FILENAZIONI "Nazioni.txt" /*File che contiene tutte le nazioni possibili*/
  28. #define FILEGENERI "Generi.txt" /*File che contiene tutti i generi cinematografici*/
  29.  
  30. /*Costanti per l'utente/admin*/
  31. #define NOME 30
  32. #define COGNOME 30
  33. #define USERNAME 20
  34. #define PASSWORD 8
  35. #define EMAIL 30
  36. #define TELEFONO 10
  37.  
  38. /*Costanti per le segnalazioni*/
  39. #define FEEDBACK 145
  40. #define ANSWER 200
  41.  
  42. #define MENU 0//Costante che individua il menù
  43.  
  44. /*Costanti per il calcolo del tempo trascorso sulla piattaforma*/
  45. #define GIORNO 1440 //giorno espresso in minuti
  46. #define ORA 60//ora espressa in minuti
  47. #define ANNO 525600 //anno espresso in minuti
  48.  
  49. /*Costanti per i film/serietv*/
  50. #define TITOLO 20
  51. #define GENERE 20
  52. #define NAZIONE 20
  53. #define REGISTA 20
  54. #define DISTRIBUZIONE 30
  55. #define ATTORI 60
  56. #define TRAMA 500
  57.  
  58. /*Fine Costanti*/
  59.  
  60. /*Inizio tipi di dati*/
  61.  
  62. struct Utente_Admin{
  63.         unsigned int Id;
  64.         char Nome[NOME];
  65.         char Cognome[COGNOME];
  66.         char Username[USERNAME];
  67.         char Password[PASSWORD];
  68.         char Email[EMAIL];
  69.         char Telefono[TELEFONO];
  70. };
  71.  
  72. struct FeedBack{
  73.         unsigned int iduser;
  74.         char feedback[FEEDBACK];
  75.         char answer[ANSWER];
  76.         unsigned int letto; // 3 valori: 0= admin non ha visualizzato; 1=admin ha visualizzato e ha risposto; 2= utente ha visualizzato la risposta
  77. };
  78.  
  79. struct Preference{
  80.         unsigned int idUser;
  81.         unsigned int scelta;// 2: film; 1: serie tv
  82.         unsigned int idFilmSerieTv;
  83.         int voto;
  84.         char genere[GENERE];
  85. };
  86.  
  87. struct Film_SerieTv{
  88.         unsigned int Id;
  89.         char Titolo[TITOLO];
  90.         char Genere[GENERE];
  91.         char Nazione[NAZIONE];
  92.         char Regista[REGISTA];
  93.         char Distribuzione[DISTRIBUZIONE];
  94.         char Attori[ATTORI];
  95.         unsigned int Anno;
  96.         unsigned int Durata;
  97.         char Trama[TRAMA];
  98.         unsigned int Stagioni;
  99.         unsigned int Episodi;
  100.         unsigned int Num_Visualizzazioni;
  101.         float voto;
  102. };
  103.  
  104. struct RecommenderSystem{
  105.         int idFilmSerieTv;
  106.         int visto;
  107. };
  108.  
  109. /*Fine tipi di dato*/
  110.  
  111.  
  112. extern unsigned int idUser;//Variabile che memorizza l'id dell'utente che ha effettuato l'accesso
  113. extern unsigned int AnnoAttuale;
  114.  
  115.  
  116. #endif /* STRUTTURE_H_ */



Quindi devo dichiarare le due variabili globali extern e poi in ogni source file che ne fa uso devo solo inizializzarle? Oppure mi basta inizializzarle nel main ?

Nota Bene: Ho provato a inizializzare le due variabili globali negli altri source file e mi da errore, quindi credo che dovrei lasciare il mondo come sta dato che di default le variabili extern sono inizializzate a 0 ( quello che voglio appunto )

Ultima modifica effettuata da perillitommaso il 09/09/2017 alle 23:03
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 1:39
Domenica, 10/09/2017
Chiamo in causa qualcuno più preparato, io so che:
L'importante è che sia "DEFINITA" in uno solo, e "DICHIARATA" in tutti gli altri come extern
poi, l header verà incluso dentro i source, quindi non dovrebbe cambiare se metterla li o in un *.c .
Il problema risiede quando includi nel source file, in cui definisci una variabile, includi anche l header dove è dichiarata extern, creado una sorta di doppia dichiarazione.

@perillitommaso ti ricordo che le stringhe finiscono tutte con il carattere '\0' , quindi devi dichiarare le stringhe (Array di char) tenendo conto di 1 carattere in più di quello che vuoi tu.

Ultima modifica effettuata da Mikelius il 10/09/2017 alle 1:44
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 7:47
Domenica, 10/09/2017
Mikelius, hai ragione! Avrò già controllato e ricontrollato non so quante volte questo particolare, ma mi faccio sempre ingannare nell'uso dei due termini. Devo avere qualche neurone che fa contatto in modo ballerino, perché per qualche ragione dovrei controllare ogni volta (pensa che prima di scrivere la risposta precedente son stati lì a ponderare ben bene su come usare i termini... poi ho sbagliato per l'ennesima volta). Chiedo venia.

Ultima modifica effettuata da AldoBaldo il 10/09/2017 alle 7:47


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 15:40
Domenica, 10/09/2017
Attualmente, con l'header impostato come ho mostrato nel commento di prima, il compilatore non mi rileva nessun errore sintattico quindi potrebbe andare bene così, l'importante è che le variabili esterne siano visibili in tutti i Source File dato che in quasi tutti le uso, vi terrò aggiornati comunque :)

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo