Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: [c++] errore funzione

  1. #1

    [c++] errore funzione

    Mi sapreste dire perche mi da errore questo programma?
    codice:
    # include <iostream>
    # include <windows.h> 
    # include <string.h> 
    # include <fstream>
    using namespace std;
    
    string nome, cogn, numero, mail;
    long pos;
    
    void inizia();
    void acquis_scritt(ofstream write);
    void scrittura();
    
    int main()
    {
      int scelta;
      cout << "RUBRICA telefonica\n"<<endl;
      //ifstream is;
      //is.open ("Rubrica", ios::binary );
      while (scelta!=5)
      {
      cout << "1) Inizia Rubrica "<<endl;
      cout << "2) Aggiungi Contatti "<<endl;
      cout << "3) Visualizza contatti "<<endl;
      cout << "4) Elimina tutta la Rubrica "<<endl;
      cout << "5) Esci"<<endl;
      cin >> scelta; 
    
      if (scelta==1)
                    {
                     ofstream write("Rubrica.txt",ios::out);
                     write << "NOME";
                     write.seekp (20, ios_base::beg);
                     write <<"COGNOME";
                     write.seekp (40, ios_base::beg);
                     write <<"NUMERO";
                     write.seekp (54, ios_base::beg); 
                     write <<"E-MAIL"<<endl;
                     acquis_scritt(&write); // qui l'errore
                     write.close();                    
                    }
      if (scelta==2)
                    {
                     ofstream write("Rubrica.txt",ios::app);
                     
                    } 
      if (scelta==3)
                    {
                           
                    } 
                    
      }                                      
      system("PAUSE");  
    }
    //------------------------------------------------------------------------------
    void acquis_scritt(ofstream write)
    {
     cout << "Inserisci  nome:"<<endl;
     cin >> nome;
     write.seekp (0, ios_base::cur);
     write << nome; 
     cout << "Inserisci  cognome:"<<endl; 
     cin >> cogn;
     pos=nome.length();
     write.seekp (20-pos, ios_base::cur);
     write << cogn; 
     cout << "Inserisci  numero:"<<endl; 
     cin >> numero;
     pos=cogn.length();
     write.seekp (20-pos, ios_base::cur);
     write << numero; 
     cout << "Inserisci  e-mail:"<<endl; 
     cin >> mail; 
     pos=numero.length();
     write.seekp (14-pos, ios_base::cur);
     write << mail << endl;
    }
    //------------------------------------------------------------------------------
    void scrittura()
    {    
    
    }
    errore:
    conversion from `std:fstream*' to non-scalar type `std:fstream' requested

  2. #2
    Perché stai passando un puntatore ad ofstream ad una funzione che si aspetta un oggetto ofstream. Personalmente credo che la cosa più saggia sia cambiare la funzione in modo che accetti un reference ad un oggetto ofstream e rimuovere l'& dalla chiamata alla funzione.
    codice:
    void acquis_scritt(ofstream & write);
    //...
                     acquis_scritt(write);
    //...
    void acquis_scritt(ofstream & write)
    //...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3

  4. #4
    MacApp, se vedi bene nel codice che ho postato, ho scritto un commento:
    // qui l'errore

    :quote:

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,327

    Re: [c++] errore funzione

    (se vabbè... avevo scritto il messaggio e l'ho inviato 10 minuti dopo )

    Controlla queste tre righe che hai scritto (i commenti li ho aggiunti io)


    codice:
    //prototipo
    void acquis_scritt(ofstream write);
    codice:
    //chiamata in main()
    acquis_scritt(&write);
    codice:
    //intestazione della funzione
    void acquis_scritt(ofstream write)
    {
    ...
    Il prototipo della funzione si aspetta un oggetto di classe ofstream, e l'intestazione della funzione lo stesso. Ma tu invece cosa passi alla funzione, in main(), dove appunto hai l'errore?
    every day above ground is a good one

  6. #6
    Originariamente inviato da Salvatore_91
    MacApp, se vedi bene nel codice che ho postato, ho scritto un commento:
    // qui l'errore

    :quote:
    ah ecco :-p

  7. #7
    ok raga, adesso il programma non da nessun errore di compilazione.
    Se inizio la rubrica, inserendi '1', va tutto bene.
    Invece se vorrei aggiungere un contatto, inserendo '2', il programma mi scrive su FILE, ma non rispetta il tracciato record.
    ad esempio:
    codice:
    NOME(+16 byte vuoti)COGNOME(+13 byte vuoti) ecc ecc
    Salvatore(+11 byte vuoti) BLABLA(+14 byte vuoti) ecc ecc
    MariaBLABLAeccecc
    Iniziando la rubrica, quindi inserendo '1' va bene.
    Dopo inserendo '2' il risultato e' come nell'esempio (Maria...eccecc) tutto attaccato

  8. #8
    (commento non più attuale )
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,327
    Originariamente inviato da Salvatore_91
    ok raga, adesso il programma non da nessun errore di compilazione.
    Se inizio la rubrica, inserendi '1', va tutto bene.
    Invece se vorrei aggiungere un contatto, inserendo '2', il programma mi scrive su FILE, ma non rispetta il tracciato record.
    ad esempio:
    codice:
    NOME(+16 byte vuoti)COGNOME(+13 byte vuoti) ecc ecc
    Salvatore(+11 byte vuoti) BLABLA(+14 byte vuoti) ecc ecc
    MariaBLABLAeccecc
    Iniziando la rubrica, quindi inserendo '1' va bene.
    Dopo inserendo '2' il risultato e' come nell'esempio (Maria...eccecc) tutto attaccato
    Stando al codice che hai postato sopra (non so se intanto hai aggiunto altro), se scegli "2" in realtà non dovrebbe fare proprio niente se non aprire in append il file in questione senza scriverci nulla, visto che l'unica istruzione del blocco "if (scelta == 2)" è

    ofstream write("Rubrica.txt",ios::app);
    every day above ground is a good one

  10. #10
    hai ragione ecco il codice:
    codice:
    # include <iostream>
    # include <windows.h> 
    # include <string.h> 
    # include <fstream>
    using namespace std;
    
    string nome, cogn, numero, mail;
    long pos;
    
    void inizia();
    void acquis_scritt(ofstream &write);
    void scrittura();
    
    int main()
    {
      int scelta;
      cout << "RUBRICA telefonica\n"<<endl;
      //ifstream is;
      //is.open ("Rubrica", ios::binary );
      while (scelta!=5)
      {
      cout << "1) Inizia Rubrica "<<endl;
      cout << "2) Aggiungi Contatti "<<endl;
      cout << "3) Visualizza contatti "<<endl;
      cout << "4) Elimina tutta la Rubrica "<<endl;
      cout << "5) Esci"<<endl;
      cin >> scelta; 
    
      if (scelta==1)
                    {
                     ofstream write("Rubrica.txt",ios::out);
                     write << "NOME";
                     write.seekp (20, ios_base::beg);
                     write <<"COGNOME";
                     write.seekp (40, ios_base::beg);
                     write <<"NUMERO";
                     write.seekp (54, ios_base::beg); 
                     write <<"E-MAIL"<<endl;
                     acquis_scritt(write);
                     write.close();                    
                    }
      if (scelta==2)
                    {
                     ofstream write("Rubrica.txt",ios::app);
                     acquis_scritt(write);
                     write.close(); 
                    } 
      if (scelta==3)
                    {
                           
                    }               
      }                                      
      system("PAUSE");  
    }
    //------------------------------------------------------------------------------
    void acquis_scritt(ofstream &write)
    {
     cout << "Inserisci  nome:"<<endl;
     cin >> nome;
     write.seekp (0, ios_base::cur);
     write << nome; 
     cout << "Inserisci  cognome:"<<endl; 
     cin >> cogn;
     pos=nome.length();
     write.seekp (20-pos, ios_base::cur);
     write << cogn; 
     cout << "Inserisci  numero:"<<endl; 
     cin >> numero;
     pos=cogn.length();
     write.seekp (20-pos, ios_base::cur);
     write << numero; 
     cout << "Inserisci  e-mail:"<<endl; 
     cin >> mail; 
     pos=numero.length();
     write.seekp (14-pos, ios_base::cur);
     write << mail << endl;
    }
    //------------------------------------------------------------------------------

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