Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] Classi reciproche

    Salve a tutti, sto iniziando a cimentarmi nel C++ ma ho qualche problemino... vi espongo subito i fatti:
    Devo dichiarare due classi, e ognuna delle due deve avere un riferimento all'altra. Ho scritto un piccolo esempio... Pippo deve avere un riferimento a Pluto, Pluto deve avere un riferimento a Pippo.
    Quando dichiaro la variabile Pluto all'interno della classe Pippo, ricevo un errore perche' la classe Pluto non e' ancora stata dichiarata. Come devo fare?
    Ecco il codice, scritto per comodita' tutto su un unico file:

    codice:
    
    #include <string>
    #include <iostream>
     
    
    class Pippo  {
    
    public:
    
    	void saluta(Pluto *p)  {
    		std::cout<<"Ciao a "<<p->getNome()<<" da "<<this->getNome()<<std::endl;
    	}
    
    	std::string getNome()  {
    		return "Pippo";
    	}
    
    };
     
    
    class Pluto  {
    
    public:
    
    	void saluta(Pippo *p)  {
    		std::cout<<"Ciao a "<<p->getNome()<<" da "<<this->getNome()<<std::endl;
    	}
    
    	std::string getNome()  {
    		return "Pluto";
    	}
    
    };
     
    
    int main()  {
    	Pippo* pippo;
    	pippo=new Pippo();
    	Pluto* pluto;
    	pluto=new Pluto();
    	pippo->saluta(pippo);
    	pluto->saluta(pluto);
    	return 0;
    }
    

  2. #2
    Codice PHP:
    #include <string>
    #include <iostream>

    using namespace std;

    class 
    Pippo// nota pre- dichiarazione

    class Pluto  {

    public:

        
    Pluto();
        ~
    Pluto();
        
    void saluta(Pippo *p)  {
            
    cout<<"Ciao a "<<p->getNome()<<" da "<<this->getNome()<<endl;
        }

        
    string getNome()  {
            return 
    "Pluto";
        }

    }; 


    class 
    Pluto// nota pre- dichiarazione

    class Pippo  {

    public:
        
    Pippo();
        ~
    Plppo();
        
    void saluta(Pluto *p)  {
            
    cout<<"Ciao a "<<p->getNome()<<" da "<<this->getNome()<<std::endl;
        }

        
    string getNome()  {
            return 
    "Pippo";
        }

    };
     

    int main()  {
        
    Pippopippo;
        
    pippo=new Pippo();
        
    Plutopluto;
        
    pluto=new Pluto();
        
    pippo->saluta(pippo);
        
    pluto->saluta(pluto);
        return 
    0;

    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  3. #3
    Ciao ti ringrazio per l'aiuto... adesso in effetti riesce a riconoscere la classe.
    Pero' c'e un altro problema...
    Riconosce la classe ma non il metodo. Cioe':
    Codice PHP:
    class Pluto  {

    public:

        
    void saluta(Pippo *p)  {
            
    cout<<"Ciao a "<<p->getNome()<<" da "<<this->getNome()<<endl;
        }

        
    string getNome()  {
            return 
    "Pluto";
        }

    }; 
    Ora non mi da' piu' l'errore quando incontra Pippo *p, pero' mi da' errore quando cerco di chiamare p->getNome()...
    Per caso si possono predichiarare anche i metodi?
    Ciao e grazie 1000 !!!

  4. #4
    codice:
     
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    class Pippo; // nota pre- dichiarazione
    class Pluto; // nota pre- dichiarazione
    
    class Pluto 
    {
        public:
        Pluto(){};
        ~Pluto(){};
        int saluta(Pippo *p);
        string getNome(){ return string("Pluto"); };
    
    }; 
    int Pluto::saluta(Pippo * p)
    {
        cout<< "Ciao a "<< p->getNome().c_str() << " da " << getNome().c_str()<<endl;
        return 0;
    }
    
    
    // class Pluto; // nota pre- dichiarazione
    
    class Pippo  
    {
        public:
        Pippo(){};
        ~Pippo(){};
        int saluta(Pluto *p);
        string getNome(){ return string("Pippo"); };
    
    };
    int Pippo::saluta(Pluto * p)
    {
        cout<< "Ciao a "<< p->getNome().c_str() << " da " << getNome().c_str()<<endl;
        return 0;
    }
    
     
    
    int main()  {
        Pippo * pippo = new Pippo();
        Pluto * pluto = new Pluto();
        pippo->saluta(pippo);
        pluto->saluta(pluto);
        return 0;
    }
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  5. #5
    Grazie 1000, finalmente sono riucito a capire il meccanismo...
    Ecco il codice funzionante:
    Codice PHP:
    #include <string>
    #include <iostream>

    using namespace std;

    class 
    Pippo// pre-dichiarazione
    class Pluto// pre-dichiarazione

    class Pluto  {
        public:
        
    Pluto(){};
        ~
    Pluto(){};
        
    void saluta(Pippo *p);
        
    string getNome(){ return "Pluto"; };

    }; 
    class 
    Pippo  {
        public:
        
    Pippo(){};
        ~
    Pippo(){};
        
    void saluta(Pluto *p);
        
    string getNome(){ return "Pippo"; };

    };
    void Pluto::saluta(Pippo pippo)  {
        
    cout<< "Ciao a "<< pippo->getNome()    << " da " << this->getNome() << endl;
    }
    void Pippo::saluta(Pluto pluto)  {
        
    cout<< "Ciao a "<< pluto->getNome() << " da " << this->getNome() << endl;
    }
    int main()  {
        
    Pippo pippo = new Pippo();
        
    Pluto pluto = new Pluto();
        
    pippo->saluta(pluto);
        
    pluto->saluta(pippo);
        return 
    0;

    Finalmente Pippo e Pluto possono salutarsi a vicenda...
    Ciao!

  6. #6

    Hem scusate

    Scusate ragazzi, questo post nn è pertinente al problema ma vorrei sapere come fate ad abilitare la visualizzazzione colorata della sintassi nel forum? Ho visto che tiene anche la spaziatura...

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.