Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Ifrit
    Registrato dal
    Oct 2005
    Messaggi
    116

    [C++] Classe scritta in file .h e .cpp con relativi legami

    Salve a tutti =)

    Per prima cosa dico che uso Qt-Creator come IDE, ma non credo sia rilevante come cosa...

    Allora, vi espongo un po' di quesito relativi al qt-creator che mi mandano il cervello in pappa....
    1. Creiamo una nuova classe
      Di default Qt-Creator mi crea due file, un file .cpp e uno .h, e rispattivamente nel primo ci mette l'implementazione metodi e nel secondo la classe;
      Fin qui tutto ok... il problema sta nel fatto che è ( come logico ) il file .cpp ad avere l'include del file .h; indi a rigor di logica nel mio programma principale dovrei includere il .cpp in modo tale che esso includa il .h e definisca i metodi... ma questo non accade, ovvero devo includere il .h per far si che tutto funzioni...
      Ora, perche' non riesco a capire come mai la cosa va cosi?? il .h non ha alcun include al cpp... non capisco proprio O.o'
      qualcuno mi illumina?? mi so perso qualcosa mentre studiavo il C++?? O.o

    2. Compiliamo i metodi per non farli vedere a nessuno
      ehm... qualcuno mi sa dire come posso fare a compilare tale file separatamente per generare il .o?
      e in quel caso, come faccio ad agganciare il .o al mio file .h? O.o


    grazie in anticipo per le info =)
    codice:
     $(".canaglia").show()

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    1) L'include serve a importare le definizioni di classi/metodi/dati/... il file .cpp contiene invece l'implementazione. Potresti, volendo, non utilizzare alcun file .h e solo file .cpp, certo ne risulterebbe un codice mal organizzato e bug-prone.

    2) Il .h e solo una rappresentazione formale dei tipi di dato e prototipi di funzione, per compilare la classe non devi fare altro che compilare la classe

    1 the return) Anche se si può fare, è scorretto includere un file .cpp, infatti al compilatore per controllare la correttezza formale del codice bastano le definizioni dei tipi di dato e dei tipi di dati utilizzati dalle funzione, l'implementazione della funzione è "gestita a parte" e poi il compilato viene "unito" dal linker che crea l'eseguibile.
    Insomma per un controllo di correttezza non è necessaria l'implementazione e quindi bastano i prototipi importati includendo il file .h.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it L'avatar di Ifrit
    Registrato dal
    Oct 2005
    Messaggi
    116
    In altre parole, il file .cpp è "automaticamente" legato al file .h dal nome?
    ovvero, all'atto della compilazione il compilatore fa a prendere il file avente estensione .cpp con lo stesso nome del .h, li "unisce", e poi il linker provedde a sistemare tutto fra i vari file .o
    giusto? =X
    codice:
     $(".canaglia").show()

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    No, non è automaticamente legato, l'hai legato tu attraverso l'include nel file .cpp.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    semplicemente tutti i file "utili" sono nel .pro (il progetto), è da quello che il compilatore capisce dove andarsi a prendere ciò che gli serve.
    Il fatto che poi tu definisca i prototipi in un file diverso dal .cpp è "solo" una "buona abitudine", come ha detto scara95 potresti scrivere l'intera classe in un unico file.
    Prova a vedere il file cpp con l'include, come un file nel quale nella prima parte c'è il contenuto del .h e nella sua seconda parte il contenuto del .cpp

  6. #6
    Utente di HTML.it L'avatar di Ifrit
    Registrato dal
    Oct 2005
    Messaggi
    116
    eh raga appunto, il file .cpp include il punto .h, ma non viceversa...
    se io includo il .h nel mio main, questo header non ha direttive che indicano dove sono localizzate le implementazioni dei metodi

    O.o' è questo che non mi torna
    codice:
     $(".canaglia").show()

  7. #7
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Il linking è gestito dall'IDE, altrimenti dovresti compilare ogni file .cpp e linkarli assieme a mano, solo i file .cpp producono codice oggetto, d'altra parte i file .h non contengono istruzioni, ma solo definizioni.

    Come ho detto prima i file .h servono a controllare la correttezza formale delle istruzioni: ogni tipo di dato deve essere corretto (assegnamenti, argomenti di funzione, valori di ritorno, espressioni, ...)
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  8. #8
    Utente di HTML.it L'avatar di Ifrit
    Registrato dal
    Oct 2005
    Messaggi
    116
    Originariamente inviato da Scara95
    Il linking è gestito dall'IDE, altrimenti dovresti compilare ogni file .cpp e linkarli assieme a mano, solo i file .cpp producono codice oggetto, d'altra parte i file .h non contengono istruzioni, ma solo definizioni.

    Come ho detto prima i file .h servono a controllare la correttezza formale delle istruzioni: ogni tipo di dato deve essere corretto (assegnamenti, argomenti di funzione, valori di ritorno, espressioni, ...)
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah ok =P perfetto ^^
    grazie infinite ^^
    codice:
     $(".canaglia").show()

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.