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

    [C++]Errore strano utilizzando Array di Puntatori

    Ciao a tutti, spero possiate darmi una mano:

    Il codice è questo:

    codice:
    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    struct Tipostud{
                    string Cognome;
                    string Nome;
                    string Matr;
                    int Eta;
                    int AnnoIscrizione;
                    string Citta;
                    };
                    typedef Tipostud* Pstud;     
                                    
    void Inserimento (Tipostud &, char &);
    void getfile(Pstud [],Pstud [],Pstud []);
    void insort(Pstud [],int ,Pstud ,char );
    
    int main(){
        
        int Numpers=3,Lrec=sizeof(Tipostud);
        /*char chr;
        Tipostud studente;
        cout<<"Numero di persone da inserire: ";
        cin>>Numpers;
        fstream filepers;
        filepers.open("studenti.bin",ios::in|ios::out|ios::binary|ios::ate);
        if (!filepers)
          filepers.open("studenti.bin",ios::out|ios::binary|ios::trunc);
        while(Numpers>0){
        Inserimento(studente,chr);
        if (chr=='s') {
        filepers.seekp(0,ios::end);
        filepers.write((char*)&studente,Lrec);
        Numpers--; 
        }}
        filepers.close();*/
        Pstud PuntaP1[Numpers],PuntaP2[Numpers],PuntaP3[Numpers];
        getfile(PuntaP1,PuntaP2,PuntaP3);
        
        
        
        
        system("pause");
        return 0;
        
    }
    
       void Inserimento (Tipostud &pers1, char &ch)
       
    {
    
       cout << "INSERIMENTO PERSONE" << endl << endl;
       cout << "Cognome= ";
       cin >> pers1.Cognome;
       cout << "Nome= ";
       cin >> pers1.Nome;
       cout << "Eta\'= ";
       cin >> pers1.Eta;
       cout << "Matricola= ";
       cin >> pers1.Matr;
       cout << "Anno Iscrizione= ";
       cin >> pers1.AnnoIscrizione;
       cout << "Citta\'= ";
       cin >> pers1.Citta;
       cout << "Salva (s/n)? ";
       cin >> ch;
       
    }
    
    void getfile(Pstud PuntaP1[],Pstud PuntaP2[],Pstud PuntaP3[]){
         
         Tipostud studente;
         ifstream file;
         file.open("studenti.bin",ios::in|ios::binary|ios::ate);
         if (!file)
          file.open("studenti.bin",ios::out|ios::binary|ios::trunc);
          
         int Lrec=sizeof(Tipostud);
         int Numstud=file.tellg()/Lrec;
         file.seekg(0,ios::beg);
         for(int i=1;i<Numstud;i++){
                 file.read((char*) &studente,Lrec);
                 PuntaP1[i]=new Tipostud;
                 *PuntaP1[i]=studente;
                 PuntaP2[i]=PuntaP1[i];
                 PuntaP3[i]=PuntaP1[i];
                 insort(PuntaP1,i,PuntaP1[i],'c');
                 insort(PuntaP2,i,PuntaP2[i],'m');
                 insort(PuntaP3,i,PuntaP3[i],'e');
                 }
         file.close();
    }
    
    void insort(Pstud Punt[],int n,Pstud Temp,char ord){
         
         int j;
         Punt[0]=Temp;
         j=n-1;
         if(ord=='c'){
                      while(stricmp(Punt[j].Cognome,Punt[0].Cognome)>0){
                      Punt[j+1]=Punt[j];
                      j--;
                      }
                      }
         else if(ord=='m'){
                      while(stricmp(Punt[j].Matr,Punt[0].Matr)>0){
                      Punt[j+1]=Punt[j];
                      j--;
                      } 
                      }  
         else{
                      while(Punt[j].Eta>Punt[0].Matr){
                      Punt[j+1]=Punt[j];
                      j--;
                      }   
                      }   
                Punt[j+1]=Punt[0];
         }
    L'errore che non capisco e che non mi fa andare avanti è questo:

    codice:
    In function `void insort(Tipostud**, int, Tipostud*, char)': 
    Cognome' has not been declared
    request for member of non-aggregate type before ',' token 
    `Cognome' has not been declared
    Lo stesso errore è ripetuto per Matr ed Eta. Sapete indicarmi una soluzione ed il motivo dell'errore?
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  2. #2
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    struct Tipostud{
                    string Cognome;
                    string Nome;
                    string Matr;
                    int Eta;
                    int AnnoIscrizione;
                    string Citta;
                    };
                    typedef Tipostud* Pstud;
    
    void Inserimento (Tipostud &, char &);
    void getfile(Pstud [],Pstud [],Pstud []);
    void insort(Pstud [],int ,Pstud ,char );
    
    int main(){
    
        int Numpers=3,Lrec=sizeof(Tipostud);
        /*char chr;
        Tipostud studente;
        cout<<"Numero di persone da inserire: ";
        cin>>Numpers;
        fstream filepers;
        filepers.open("studenti.bin",ios::in|ios::out|ios::binary|ios::ate);
        if (!filepers)
          filepers.open("studenti.bin",ios::out|ios::binary|ios::trunc);
        while(Numpers>0){
        Inserimento(studente,chr);
        if (chr=='s') {
        filepers.seekp(0,ios::end);
        filepers.write((char*)&studente,Lrec);
        Numpers--;
        }}
        filepers.close();*/
        Pstud PuntaP1[Numpers],PuntaP2[Numpers],PuntaP3[Numpers];
        getfile(PuntaP1,PuntaP2,PuntaP3);
    
    
    
    
        system("pause");
        return 0;
    
    }
    
       void Inserimento (Tipostud &pers1, char &ch)
    
    {
    
       cout << "INSERIMENTO PERSONE" << endl << endl;
       cout << "Cognome= ";
       cin >> pers1.Cognome;
       cout << "Nome= ";
       cin >> pers1.Nome;
       cout << "Eta'= ";
       cin >> pers1.Eta;
       cout << "Matricola= ";
       cin >> pers1.Matr;
       cout << "Anno Iscrizione= ";
       cin >> pers1.AnnoIscrizione;
       cout << "Citta'= ";
       cin >> pers1.Citta;
       cout << "Salva (s/n)? ";
       cin >> ch;
    
    }
    
    void getfile(Pstud PuntaP1[],Pstud PuntaP2[],Pstud PuntaP3[]){
    
         Tipostud studente;
         ifstream file;
         file.open("studenti.bin",ios::in|ios::binary|ios::ate);
         if (!file)
          file.open("studenti.bin",ios::out|ios::binary|ios::trunc);
    
         int Lrec=sizeof(Tipostud);
         int Numstud=file.tellg()/Lrec;
         file.seekg(0,ios::beg);
         for(int i=1;i<Numstud;i++){
                 file.read((char*) &studente,Lrec);
                 PuntaP1[i]=new Tipostud;
                 *PuntaP1[i]=studente;
                 PuntaP2[i]=PuntaP1[i];
                 PuntaP3[i]=PuntaP1[i];
                 insort(PuntaP1,i,PuntaP1[i],'c');
                 insort(PuntaP2,i,PuntaP2[i],'m');
                 insort(PuntaP3,i,PuntaP3[i],'e');
                 }
         file.close();
    }
    
    void insort(Pstud Punt[],int n,Pstud Temp,char ord){
    
         int j;
         Punt[0]=Temp;
         j=n-1;
         if(ord=='c'){
                      while(strcmp(Punt[j]->Cognome.c_str(),Punt[0]->Cognome.c_str())>0){
                      Punt[j+1]=Punt[j];
                      j--;
                      }
                      }
         else if(ord=='m'){
                      while(strcmp(Punt[j]->Matr.c_str(),Punt[0]->Matr.c_str())>0){
                      Punt[j+1]=Punt[j];
                      j--;
                      }
                      }
         else{
    
                    while(Punt[j]->Eta > Punt[0]->Matr) 
                      {
                      Punt[j+1]=Punt[j];
                      j--;
                      }
                      }
                Punt[j+1]=Punt[0];
         }
    Che volevi fare con il codice in rosso ?
    Experience is what you get when you don’t get what you want

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Se sono puntatori a struttura allora devi scrivere

    Punt[j]->Cognome
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Originariamente inviato da oregon
    Se sono puntatori a struttura allora devi scrivere

    Punt[j]->Cognome
    In effetti me ne sono accorto e dho modificato, ma ora il programma si blocca quando va ad eseguire:

    codice:
    *PuntaP1[i]=studente;
    Anche se sto seguendo un altro programma simile dove funziona questo frammento di codice ed anche l'utilizzo del punto per i puntatori.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  5. #5
    Che volevi fare con il codice in rosso ?
    Sbagliato, voleva essere:

    codice:
     while((Punt[j]->Eta) > (Punt[0]->Eta)) 
                      {
                      Punt[j+1]=Punt[j];
                      j--;
                      }
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  6. #6
    Si te lo avevo corretto sto erroruccio ... ma con il codice in rosso che volevi fare ?
    Non puoi confrontare, in quel modo, una stringa con un valore !

    Ciau oregon XD

    EDIT
    Ah ok XD
    Experience is what you get when you don’t get what you want

  7. #7
    Originariamente inviato da Xaratroom
    Si te lo avevo corretto sto erroruccio ... ma con il codice in rosso che volevi fare ?
    Non puoi confrontare, in quel modo, una stringa con un valore !

    Ciau oregon XD

    EDIT
    Ah ok XD
    Volevo fare gli stessi confronti di prima ma sul campo Eta.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Quale problema ti da' quando si ferma su

    *PuntaP1[i]=studente;

    ??

    (ciao Xar)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da oregon
    Quale problema ti da' quando si ferma su

    *PuntaP1[i]=studente;

    ??

    (ciao Xar)
    Il programma viene compilato, semplicemente si blocca e da errore di windows.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  10. #10
    E' assurdo, il codice è perfettamente uguale, a parte i nomi delle variabili, ad uno che ho testato e funziona.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

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.