Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2015
    Messaggi
    5

    Problema ridefinizione operatore <<

    Salve,
    ho un problema relativo alla ridefinizione dell'operatore <<.La classe Segreteria ha come attributo privato un vettore di puntatori a Docente. Durante l'esecuzione del programma piuttosto che visualizzare i dati relativi al docente, visualizza un indirizzo.

    codice:
    ostream& operator<<(ostream& out,const Docente &d){
        out << d.nome << " "<< d.cognome;
        return out;
    }
    codice:
    #ifndef SEGRETERIA_H
    #define SEGRETERIA_H
    
    #include"Docente.h"
    #include"Studente.h"
    #include"Materia.h"
    #include"Verbale.h"
    
    
    class Segreteria{
    
        public:
            Segreteria();
            ~Segreteria();
            void addDocente();
            void addStudente();
            void addMateria();
            void loadVerbale();
    
        private:
        Docente* doc[30];
        Studente* stu[300];
        Materia* mat[30];
        Verbale* ver[50];
            
    };
    
    #endif
    Implementazione metodo addDocente():
    codice:
    void Segreteria :: addDocente(){
        string n,c;
        cout << "Inserisci nome e cognome docente: ";
        cin >> n >> c;
        for(int i = 0; i < 30; i++)
            if(doc[i]==0){
            doc[i] = new Docente(n,c);
            cout << (*doc[i]);
            return;
            }
    }
    output:

    1)Aggiungi docente
    2)Aggiungi studente
    3)Aggiungi materia
    4)Caricamento nuovo verbale
    0) Esci
    1
    Inserisci nome e cognome del docente: a b
    0x103d070
    1)Aggiungi docente
    2)Aggiungi studente
    3)Aggiungi materia
    4)Caricamento nuovo verbale
    0) Esci



    Avete qualche dritta sulla possibile risoluzione di questo errore?

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Ho fatto una prova e funziona
    codice:
    class Docente{
    public:
    	Docente(std::string nome, std::string cognome) : nome(nome), cognome(cognome){};
    	friend std::ostream& operator<<(std::ostream& out, const Docente &d){
    		out << d.nome << " " << d.cognome;
    		return out;
    	}
    private:
    	std::string nome, cognome;
    };
    codice:
    std::cout << *new Docente("asd", "lol");

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2015
    Messaggi
    5
    Quote Originariamente inviata da RoTeam Visualizza il messaggio
    Ho fatto una prova e funziona
    codice:
    class Docente{
    public:
        Docente(std::string nome, std::string cognome) : nome(nome), cognome(cognome){};
        friend std::ostream& operator<<(std::ostream& out, const Docente &d){
            out << d.nome << " " << d.cognome;
            return out;
        }
    private:
        std::string nome, cognome;
    };
    codice:
    std::cout << *new Docente("asd", "lol");
    bella storia questa. Speravo ci fosse qualche problema nel mio sorgente. Grazie comunque per la conferma.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quote Originariamente inviata da valo87 Visualizza il messaggio
    bella storia questa. Speravo ci fosse qualche problema nel mio sorgente. Grazie comunque per la conferma.
    Ma la tua classe Docente qual è ?

    E quale compilatore usi ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2015
    Messaggi
    5
    Come compilatore uso gcc.

    Interfaccia Docente
    codice:
    #define DOCENTE_H
    
    #include<string>
    using std:: string;
    
    #include <iostream>
    using std :: istream;
    using std :: ostream;
    
    class Docente{
    friend ostream& operator<<(ostream&, const Docente&); 
    friend istream& operator>>(istream&, Docente&);
        public:
            Docente(string, string);
            void stampa();
            string getNome();
            string getCognome();
        private:
            string nome,cognome;
    };
    
    
    #endif

    Docente.cpp
    codice:
    #include "Docente.h"
    
    #include <iostream>
    using std :: cout;
    using std :: endl;
    using std ::istream;
    using std :: ostream;
    
    #include <string>
    using std :: string;
    
    Docente :: Docente(string n, string c){
        nome = n;
        cognome = c;
    }
    
    void Docente :: stampa(){
        cout << "Docente : " << nome << cognome;
    }
    
    string Docente :: getNome(){
        return nome;
    }
    
    string Docente :: getCognome(){
        return cognome;
    }
    
    ostream& operator<<(ostream& out,const Docente &d){
        out << d.nome << " "<< d.cognome;
        return out;
    }
    
    istream& operator>>(istream& in, Docente &d){
        string n,c;
        in >> n >> c;
        d.nome = n;
        d.cognome = c;
        return in;
    }

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    A me non dà nessun problema ... se pubblichi, una volta per tutte, *tutto* il codice (compreso il main) che utilizzi, forse il problema è da qualche altra parte ... (suppongo proprio nel main).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2015
    Messaggi
    5
    Quote Originariamente inviata da oregon Visualizza il messaggio
    A me non dà nessun problema ... se pubblichi, una volta per tutte, *tutto* il codice (compreso il main) che utilizzi, forse il problema è da qualche altra parte ... (suppongo proprio nel main).
    Perdonami per la non completezza delle informazioni. Ho applicato delle modifiche alle funzioni ( verificando preventivamente il funzionamento in un codice a parte). Il problema persiste comunque.

    Docente.h

    codice:
    #ifndef DOCENTE_H
    #define DOCENTE_H
    
    #include<string>
    using std:: string;
    
    #include <iostream>
    using std :: istream;
    using std :: ostream;
    
    class Docente{
    friend ostream& operator<<(ostream&, const Docente*); 
    friend istream& operator>>(istream&, Docente* &);
        public:
            Docente();
            Docente(string, string);
            void stampa();
            string getNome();
            string getCognome();
        private:
            string nome,cognome;
    };
    
    
    #endif

    Docente.cpp
    codice:
    #include "Docente.h"
    
    #include <iostream>
    using std :: cout;
    using std :: endl;
    using std ::istream;
    using std :: ostream;
    
    #include <string>
    using std :: string;
    
    Docente :: Docente(){};
    
    Docente :: Docente(string n, string c){
        nome = n;
        cognome = c;
    }
    
    void Docente :: stampa(){
        cout << "Docente : " << nome << cognome;
    }
    
    string Docente :: getNome(){
        return nome;
    }
    
    string Docente :: getCognome(){
        return cognome;
    }
    
    ostream& operator<<(ostream& out,const Docente* d){
        out << d->nome << " "<< d->cognome;
        return out;
    }
    
    istream& operator>>(istream& in, Docente* &d){
        in >> d->nome >> d->cognome;
        return in;
    }
    Segreteria.h
    codice:
    #ifndef SEGRETERIA_H
    #define SEGRETERIA_H
    
    #include"Docente.h"
    #include"Studente.h"
    #include"Materia.h"
    #include"Verbale.h"
    
    
    class Segreteria{
    
        public:
            Segreteria();
            ~Segreteria();
            void addDocente();
            void addStudente();
            void addMateria();
            void loadVerbale();
    
        private:
        Docente* doc[30];
        Studente* stu[300];
        Materia* mat[30];
        Verbale* ver[50];
            
    };
    
    #endif
    Segreteria.cpp
    codice:
    #include "Segreteria.h"
    #include "Docente.h"
    #include "Materia.h"
    #include "Verbale.h"
    
    
    #include <iostream>
    using std :: cin;
    using std :: cout;
    using std :: endl;
    using std :: istream;
    using std :: ostream;
    
    #include <string>
    using std :: string;
    
    Segreteria :: Segreteria(){
        for(int i = 0; i < 30;i++)
            doc[i] = 0;
        for(int i = 0; i < 300;i++)
            stu[i] = 0;
        for(int i = 0; i < 30;i++)
            mat[i] = 0;
        for(int i = 0; i < 50;i++)
            ver[i] = 0;
    }
    
    Segreteria::~Segreteria(){
        for(int i = 0; i < 30;i++)
            if(doc[i])
                delete doc[i];
        for(int i = 0; i < 300;i++)
            if(stu[i])
                delete stu[i];
        for(int i = 0; i < 30;i++)
            if(mat[i])
            delete mat[i];
        for(int i = 0; i < 50;i++)
            if(ver[i])
                delete ver[i];
    }
    
    
    void Segreteria :: addDocente(){
        cout << "Inserisci nome e cognome docente: ";
        for(int i = 0; i < 30; i++)
            if(doc[i]==0){
            doc[i] = new Docente;
            cin >> doc[i];
            //doc[i]->stampa();
            cout << doc[i];
            break;
            }
    }
    
    void Segreteria :: addStudente(){//Studente: matricola, nome, cognome,cdl
        long m;
        string n, c, cdl;
        cout << "Inserisci matricola, nome, cognome, cdl dello studente: ";
        cin >> m >> n >> c >> cdl;
        for (int i = 0; i < 300; i++)
            if(stu[i] == 0){
                stu[i] = new Studente(n, c,cdl,m);
                return;
            }
            
    }
    
    void Segreteria :: addMateria(){ //string nome,int codice,cfu
        string n;
        int c, cf;
        cout << "Inserisci nome, codice e cfu materia : ";
        cin >> n >> c >> cf;
        for(int i = 0; i < 30; i++)
            if(mat[i] ==0){
                mat[i] = new Materia(n,c,cf);
                return;
            }
    }
    
    void Segreteria :: loadVerbale(){
    
    }
    main.cpp
    codice:
    #include "Segreteria.h"
    
    #include<iostream>
    using std :: cout;
    using std :: cin;
    using std :: endl;
    
    #include<string>
    using std :: string;
    
    int main(){
        Segreteria seg;
    
        while(true)
        {
            char c;
            cout<<endl;
            cout << "1)Aggiungi docente" <<endl;
            cout << "2)Aggiungi studente" <<endl;
            cout << "3)Aggiungi materia" <<endl;
            cout << "4)Caricamento nuovo verbale" <<endl;
            cout << "0) Esci"<<endl;
            cin >> c;
            switch(c){
                case('1'):  seg.addDocente();
                            break;
                case('2'):  seg.addStudente();
                            break;
                case('3'):  seg.addMateria();
                            break;
                case('4'):  seg.loadVerbale();
                            break;
                case('0'):     return 0;
            }
        }
        return 0;
    }
    Ultima modifica di valo87; 15-07-2015 a 12:30

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2015
    Messaggi
    5
    Il codice è funzionante. Semplicemente lanciavo in esecuzione continuamente un file che si riferiva ad una vecchia compilazione.
    Grazie mille per l'aiuto.
    Si può chiudere la discussione.

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.