Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [C++] creare libreria

    Salve raga, vorrei creare una semplice libreria per gestire i file.

    Ora ad esempio, ho scritto il seguente programma:
    codice:
    # include <iostream>
    # include <stdio.h>
    # include <fstream>
    # include <string>
    # include <sstream> 
    
    using namespace std;
    
    int ID;
    
    class File
    {
    
     public:
    	void ApriFileInScrittura(string NomeFile, std::ios_base::openmode metodo)
    	{
    		ofstream write(NomeFile.c_str(), metodo); 
    	}   
    /************************************FINE**************************************/    
        void GeneraID(string NomeFile) 
        {
         ifstream trovaID("ID.txt", ios::in); //ID.txt file contentente il numero                                     // dell'ultimo ID inserito
         if (trovaID)
                  {
                   trovaID >> ID;
                   ID=ID+1;
                   trovaID.close();
                  } 
                  else
                  ID=1; 
                     
         ofstream write(NomeFile.c_str(),ios::app); 
         write <<"L;";   /* Imposta FLAG per la CANCELLAZIONE LOGICA*/
    
    ///////////////////////////// 
         stringstream s;      //   
         string ss;          //          
         s << ID ;          //
         ss = s.str();     // /* Dimesione dell' ID = 5
         ss.resize(5);    //  dato che ss.resize(5); */
         write <<ss;     //
    //////////////////////  
         write.close();
      
      // Aggiorna L'ID che viene scritto sul file ID.txt
         ofstream aggID("ID.txt", ios::out);  
         aggID << ID;    
         aggID.close();                    
        } 
    /************************************FINE**************************************/    
        void ScriviCampo(string NomeFile, string Campo, int DimCampo)
        {
         ofstream write(NomeFile.c_str(),ios::app);
         Campo.resize(DimCampo);
         write << Campo;
         write.close();    
        }
    /************************************FINE**************************************/    
        void ScriviUltimoCampo(string NomeFile, string Campo, int DimCampo)
        {
         ofstream write(NomeFile.c_str(),ios::app);
         Campo.resize(DimCampo);
         write << Campo << endl;
         write.close();    
        } 
    };
    
    int main()
    {
        File A1;
        A1.ApriFileInScrittura("PROVA.txt", ios::app);
        A1.GeneraID("PROVA.txt");  
        A1.ScriviCampo("PROVA.txt", "Salvatore", 20);
        A1.ScriviCampo("PROVA.txt", "Ciotola", 20);
        A1.ScriviUltimoCampo("PROVA.txt", "UltimoCampo", 20);
        
        getchar();
        getchar();
    }
    Io ora vorrei farne di questo programma una libreria, nel senso che:
    tutto il seguente codice, deve stare in un file chiamato "mialibreria.h" e il resto deve essere il mio file.cpp:
    codice:
    # include <iostream>
    # include <stdio.h>
    # include <fstream>
    # include <string>
    # include <sstream> 
    
    using namespace std;
    
    int ID;
    
    class File
    {
    
     public:
    	void ApriFileInScrittura(string NomeFile, std::ios_base::openmode metodo)
    	{
    		ofstream write(NomeFile.c_str(), metodo); 
    	}   
    /************************************FINE**************************************/    
        void GeneraID(string NomeFile) 
        {
         ifstream trovaID("ID.txt", ios::in); //ID.txt file contentente il numero                                     // dell'ultimo ID inserito
         if (trovaID)
                  {
                   trovaID >> ID;
                   ID=ID+1;
                   trovaID.close();
                  } 
                  else
                  ID=1; 
                     
         ofstream write(NomeFile.c_str(),ios::app); 
         write <<"L;";   /* Imposta FLAG per la CANCELLAZIONE LOGICA*/
    
    ///////////////////////////// 
         stringstream s;      //   
         string ss;          //          
         s << ID ;          //
         ss = s.str();     // /* Dimesione dell' ID = 5
         ss.resize(5);    //  dato che ss.resize(5); */
         write <<ss;     //
    //////////////////////  
         write.close();
      
      // Aggiorna L'ID che viene scritto sul file ID.txt
         ofstream aggID("ID.txt", ios::out);  
         aggID << ID;    
         aggID.close();                    
        } 
    /************************************FINE**************************************/    
        void ScriviCampo(string NomeFile, string Campo, int DimCampo)
        {
         ofstream write(NomeFile.c_str(),ios::app);
         Campo.resize(DimCampo);
         write << Campo;
         write.close();    
        }
    /************************************FINE**************************************/    
        void ScriviUltimoCampo(string NomeFile, string Campo, int DimCampo)
        {
         ofstream write(NomeFile.c_str(),ios::app);
         Campo.resize(DimCampo);
         write << Campo << endl;
         write.close();    
        } 
    };
    Pero non ci riesco, qualkuno di voi puo dirmi come fare?

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    225
    come già più volte sottolineato in questo forum i file .h o .hpp non sono librerie ma file inclusi.
    Per creare una libreria devi scrivere un sorgente che contenga le funzioni o le classi che vuoi esportare ma senza il main, che è in questo caso inutile.
    Questo sorgente va poi compilato e linkato con quanto necessario per creare una libreria statica o dinamica, a secondo di quella che si voglia utilizzare.
    Per creare queste librerie ci sono istruzioni apposite da dare al compilatore.
    Dopo che hai creato la tua libreria la potrai utilizzare nei tuoi programmi senza che questa venga nuovamente compilata e, nel caso delle librerie dinamiche, senza che faccia neanche parte del tuo eseguibile
    ciao
    sergio

  3. #3
    Scusami per la mia ignoranza.
    Ma non e' che potresti indicarmi come scrivere (o suddividere i file)??? Ho postato il codice sorgente apposta.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    225
    forse non vuoi creare una libreria ma semplicemente scriver un file header.
    In questo caso tieni presente che è meglio inserire nel file header solo le dichiarazioni e non il corpo delle funzioni
    Nel tuo caso il file header dovrebbe essere qualcosa simile a
    codice:
    # include <iostream>
    # include <stdio.h>
    # include <fstream>
    # include <string>
    # include <sstream> 
    
    using namespace std;
    
    int ID;
    
    class File
    {
    
     public:
        void ApriFileInScrittura(string NomeFile, std::ios_base::openmode metodo);
        void GeneraID(string NomeFile) ;
        void ScriviCampo(string NomeFile, string Campo, int DimCampo);
        void ScriviUltimoCampo(string NomeFile, string Campo, int DimCampo);
    };
    l'mplementazione la dovrai invece mettere nel file cpp e verrà qualcosa del tipo

    codice:
        void File::GeneraID(string NomeFile) 
        {
         ifstream trovaID("ID.txt", ios::in); //ID.txt file contentente il numero                                     // dell'ultimo ID inserito
         if (trovaID)
                  {
                   trovaID >> ID;
                   ID=ID+1;
                   trovaID.close();
                  } 
                  else
                  ID=1; 
                     
         ofstream write(NomeFile.c_str(),ios::app); 
         write <<"L;";   /* Imposta FLAG per la CANCELLAZIONE LOGICA*/
    
    ///////////////////////////// 
         stringstream s;      //   
         string ss;          //          
         s << ID ;          //
         ss = s.str();     // /* Dimesione dell' ID = 5
         ss.resize(5);    //  dato che ss.resize(5); */
         write <<ss;     //
    //////////////////////  
         write.close();
      
      // Aggiorna L'ID che viene scritto sul file ID.txt
         ofstream aggID("ID.txt", ios::out);  
         aggID << ID;    
         aggID.close();                    
        } 
    /************************************FINE**************************************/
    e così via
    ciao
    sergio

  5. #5
    scusa ma non ho capito.

    Io vorrei suddividere il mio programma in :
    una libreria.h e un programma.cpp


    Non so come fare?? potresti spiegarti meglio?, specificando come chiamare i file

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    225
    allora un file header (.h o .hpp) non è una libreria!
    Normalmente in C++ nel file header dovresti inserire le dichiarazioni e nel file .cpp le implementazione.
    La struttura del file .h te la ho già scritta, salvo errori od omissioni.
    Il file .cpp dovrà invece, prima di tutto, includere il file .h e questo si fa con la direttiva del preprocessore

    codice:
    #include "mio_header.h"
    e quindi la implementazione, nel tuo caso, della classe File.
    Questo si fa come ti ho indicato nel precedente post, cioè scrivi la funzione facendo precedere il nome della tua funzione dal nome della classe seguito da :: .
    Nel file .cpp dovrai quindi inserire il tuo main.

    Non entro in merito nella classe che sembra contenere solo funzioni statiche, dato che non so l'uso che ne vuoi fare.
    ciao
    sergio

  7. #7
    scusami... ma non ci siamo capiti.

    Indipendemente, io vorrei che in un file ci siano le funzioni o metodi (con tutto il loro codice), mentre in un altro file, c'e' il programma, che esegue le funzioni o metodi dell'altro.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    No salvatore sei tu che non hai capito.

    Ti servono 3 file:

    main.cpp
    mio_header.h
    mio_header.cpp

    in main.cpp devi scrivere:

    codice:
    #include "mio_header.h"
    
    int main()
    {
        //Qui ci metti il tuo programma
    }
    In mio_header.h ci metti solo i prototipi delle funzioni che si trovano in mio_header.ccp, e in quest'ultimo file scrivi le implementazioni delle funzioni che hai dichiarato nell'header.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  9. #9
    ti ringrazio, ma sto impazzendo non sto capendo niente.

    Cmq questo e il mio programma, non e' che potresti dividermelo tu??
    SPecificando il codice da inserire in tutti e tre i file??
    Ad esempio in Main.cpp, mi dici cosa scrivere
    codice:
    codice
    In mio_header.h
    codice:
    codice
    mio_header.cpp
    codice:
    codice
    Ecco tutto il mio codice:
    codice:
    # include <iostream>
    # include <stdio.h>
    # include <fstream>
    # include <string>
    # include <sstream> 
    
    using namespace std;
    
    int ID;
    
    class File
    {
    
     public:
    	void ApriFileInScrittura(string NomeFile, std::ios_base::openmode metodo)
    	{
    		ofstream write(NomeFile.c_str(), metodo); 
    	}   
    /************************************FINE**************************************/    
        void GeneraID(string NomeFile) 
        {
         ifstream trovaID("ID.txt", ios::in); //ID.txt file contentente il numero                                     // dell'ultimo ID inserito
         if (trovaID)
                  {
                   trovaID >> ID;
                   ID=ID+1;
                   trovaID.close();
                  } 
                  else
                  ID=1; 
                     
         ofstream write(NomeFile.c_str(),ios::app); 
         write <<"L;";   /* Imposta FLAG per la CANCELLAZIONE LOGICA*/
    
    ///////////////////////////// 
         stringstream s;      //   
         string ss;          //          
         s << ID ;          //
         ss = s.str();     // /* Dimesione dell' ID = 5
         ss.resize(5);    //  dato che ss.resize(5); */
         write <<ss;     //
    //////////////////////  
         write.close();
      
      // Aggiorna L'ID che viene scritto sul file ID.txt
         ofstream aggID("ID.txt", ios::out);  
         aggID << ID;    
         aggID.close();                    
        } 
    /************************************FINE**************************************/    
        void ScriviCampo(string NomeFile, string Campo, int DimCampo)
        {
         ofstream write(NomeFile.c_str(),ios::app);
         Campo.resize(DimCampo);
         write << Campo;
         write.close();    
        }
    /************************************FINE**************************************/    
        void ScriviUltimoCampo(string NomeFile, string Campo, int DimCampo)
        {
         ofstream write(NomeFile.c_str(),ios::app);
         Campo.resize(DimCampo);
         write << Campo << endl;
         write.close();    
        } 
    };
    
        File A1;
        A1.ApriFileInScrittura("PROVA.txt", ios::app);
        A1.GeneraID("PROVA.txt");  
        A1.ScriviCampo("PROVA.txt", "Salvatore", 20);
        A1.ScriviCampo("PROVA.txt", "Ciotola", 20);
        A1.ScriviUltimoCampo("PROVA.txt", "UltimoCampo", 20);
        getchar();
        getchar();

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    225
    il main.cpp potrebbe essere così
    codice:
    #include "mio_header.h"
    
    int main()
    {
        File A1;
        A1.ApriFileInScrittura("PROVA.txt", ios::app);
        A1.GeneraID("PROVA.txt");  
        A1.ScriviCampo("PROVA.txt", "Salvatore", 20);
        A1.ScriviCampo("PROVA.txt", "Ciotola", 20);
        A1.ScriviUltimoCampo("PROVA.txt", "UltimoCampo", 20);
        
        getchar();
        getchar();
    
          return ( 0 ) ; 
    }

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 © 2024 vBulletin Solutions, Inc. All rights reserved.