Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    8

    [c++] Vettore di puntatori a classe

    Ciao a tutti,

    ho iniziato da poco a utilizzare c++, e vorrei un aiuto su come gestire un vettore di puntatori (che proprio non riesco a capire, soprattutto la sintassi del codice).

    Ho letto e riletto le guide sui puntatori, ma niente, non riesco a risolvere il problema.

    L'esercizio da svolgere è il seguente (le parti di codice sono dei suggerimenti che mi vengono dati):

    - Gestire un vettore di (puntatori a) esami
    codice:
          vector<Exam*> exams;
    - Ripetutamente chiedere all'utente di scegliere tra:
    Aggiunta di un nuovo esame
    codice:
            Exam* ex = new Exam("FI", 9, "2013", 28);
            exams.push_back(ex);
    Eliminazione di un esame esistente
    (deallocazione memoria + rimozione puntatore)
    codice:
            delete exams[i];
            exams.erase(exams.begin()+i);
    - Calcolo delle ore complessive di studio

    Al termine di ogni operazione dell'utente,
    visualizzare l'elenco aggiornato di tutti gli esami.

    La classe a cui deve puntare il vettore è la seguente:
    codice:
    #ifndef EXHAM_H
    #define EXHAM_H
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    
    class exham
    {
    
    public:
        exham(string nomeEsame, int crediti, string data, int voto);
        int estimateWork();
    private:
        string nomeEsame;
        int crediti;
        string data;
        int voto;
    };
    
    #endif // EXHAM_H
    Detto ciò, la mia domanda è: Come devo fare per creare questo vettore di puntatori?

    Grazie in anticipo per le risposte

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa, il vettore è

    vector<Exam*> exams;

    e quindi la tua classe sarà

    class Exam

    non

    class exham
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    8
    Si, hai ragione.

    Ho appena provato, cambiando il nome della classe, come dici tu, ma nnt.

    Adesso è questa:
    codice:
    #ifndef EXAM_H
    #define EXAM_H
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    
    class Exam
    {
    
    public:
        Exam(string nomeEsame, int crediti, string data, int voto);
        int estimateWork();
    private:
        string nomeEsame;
        int crediti;
        string data;
        int voto;
    };
    
    #endif // EXAM_H

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Che è nnt ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    8
    Mi da sempre gli stessi errori.

    Mi segnala sempre un errore quando faccio questo:
    codice:
    Exam* esame = new esame(nomeEsame,crediti, data, voto);
            elencoEsami.push_back(esame);
    questo è il codice (temporaneo) del main:
    codice:
    #include <iostream>
    #include <exam.h>
    #include <vector>
    
    vector<Exam*> elencoEsami;
    
    using namespace std;
    
    int main()
    {
        
        int scelta;
        cout<<"                                     *****MENU*****      "<<endl;
        cout<<endl;
        cout<<"1- Aggiungere un nuovo esame"<<endl;
        cout<<"2- Rimuovere un esame"<<endl;
        cout<<"3- Calcolo delle ore complessive di studio"<<endl;
        cout<<"4- Uscita"<<endl;
        cin>>scelta;
        switch (scelta)
        {
        case (1):
            string nomeEsame;
            int crediti;
            string data;
            int voto;
            cout<<"Inserire il nome della materia: "<<endl;
            cin>>nomeEsame;
            cout<<"Inserire il numero di crediti relativi alla materia: "<<endl;
            cin>>crediti;
            cout<<"Inserire la data relativa al giorno dell'esame (gg/mm/aaaa): "<<endl;
            cin>>data;
            cout<<"Inserire il voto conseguito: "<<endl;
            cin>>voto;
            Exam* esame = new esame(nomeEsame,crediti, data, voto);
            elencoEsami.push_back(esame);
            break;

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Exam* esame = new esame(nomeEsame,crediti, data, voto);

    La new si usa con il nome della classe, come avevi già nei suggerimenti. Leggili i suggerimenti.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    8
    Giusto!

    Ho apportato il cambiamento e adesso quel problema non me lo da più!

    grazie


    Ora vorrei chiederti, come posso fare per sapere la grandezza del vettore?
    cioè vorrei fare che chiedo la data dell'esame da eliminare e poi, cercando nel vettore, confronto la data inserita dall'utente con quelle nel vettore e appena trovo una corrispondenza, elimino quell'esame dal vettore.

    ho provato questo ma mi da errore:
    codice:
    case (2):
                string cancEsame;
                int x;
                cout<<"Inserire la data dell'esame da eliminare (gg/mm/aaaa): "<<endl;
                cin>>cancEsame;
                for (int i=0; i<elencoEsami.size - 1;++i){
                    if (elencoEsami.data == cancEsame){
                        x=i;
                    }
                }
                delete elencoEsami[x];
                elencoEsami.erase(elencoEsami.begin()+x);
                break;

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    size()
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    8
    ok!

    Ho fatto cosi:
    codice:
    case (2):
            string cancEsame;
            int x;
            cout<<"Inserire la data dell'esame da eliminare (gg/mm/aaaa): "<<endl;
            cin>>cancEsame;
            for (int i=0; i<(elencoEsami.size()) - 1; ++i){
                if ((elencoEsami.data) == (cancEsame)){
                    x=i;
                }
            }
            delete elencoEsami[x];
            elencoEsami.erase(elencoEsami.begin()+x);
            break;
    però mi da errore nella riga "if ((elencoEsami.data) == (cancEsame))"
    Questo è l'errore che mi da:
    codice:
    main.cpp:43: error: no match for 'operator==' in 'elencoEsami.std::vector<_Tp, _Alloc>::data [with _Tp = Exam*, _Alloc = std::allocator<Exam*>, std::vector<_Tp, _Alloc>::const_pointer = Exam* const*] == cancEsame'
    come posso risolverlo?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    elencoEsami è una collezione di puntatori che puoi utilizzare con un indice

    codice:
    elencoEsami[i]->
    ma data è un membro privato della classe e non ci puoi accedere direttamente.

    Devi prevedere qualcosa nella classe per accedere al membro privato. Pensaci.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.