Puntatori a Classi

di il
3 risposte

Puntatori a Classi

Ciao a tutti, vi chiedo scusa fin da ora per la domanda stupidissima che vi vado a fare, ma non ci dormo la notte per questo problema:

class Nodo_RB{

      private:     string parola;

      public:

             Nodo_RB(){parola="";};
             string Ritorna_chiave(){return parola;};
             void Carica_Parola(string p) {parola=p;};

             };

int main()

{       Nodo_RB *x;
        string A="aaaaa";
        x->Carica_Parola(A);
        cout<<x->Ritorna_chiave()<<endl;
        return EXIT_SUCCESS;

}
Non ne vuole sapere di copiare la stringa in parola!
Vi ringrazio anticipatamente per l'aiuto.

3 Risposte

  • Re: Puntatori a Classi

    Che ne dici di allocare spazio per il nodo?
    
    Nodo_RB *x = new Nodo_RB;
    
  • Re: Puntatori a Classi

    Grazie e scusa il ritardo nella risposta, si mi mancava l'allocazione pensavo la facesse in automatico!!
    Grazie ancora.

    Ciaoooooo
  • Re: Puntatori a Classi

    Scusami se approfitto della disponibilità, dopo aver risolto questo ho il problema opposto, cioè ho 2 puntatore che dovrebbero essere non allocati e invece lo sono:
    
    
    class Nodo_RB{
          protected:     string parola;
                         string  lemma;
                         Nodo_RB* padre;
                         Nodo_RB* figlio_sinistro;
                         Nodo_RB* figlio_destro;
                         COLOR colore;
                  
          public:
                 Nodo_RB()                 {parola=lemma="";
                                           padre=figlio_sinistro=figlio_destro=NULL;
                                           colore=NERO;
                                           }
                 //~Nodo_RB();
                 Nodo_RB(Nodo_RB &nuovo)               {parola=nuovo.parola;
                                                       lemma=nuovo.lemma;
                                                       padre=nuovo.padre;
                                                       figlio_sinistro=nuovo.figlio_sinistro;
                                                       figlio_destro=nuovo.figlio_destro;};
                 string Ritorna_chiave(){return parola;};
                 string Ritorna_lemma() {return lemma;};
                 Nodo_RB* Ritorna_Padre() {return padre;}
                 Nodo_RB* Ritorna_Figlio_Sinistro() {return figlio_sinistro;};
                 Nodo_RB* Ritorna_Figlio_Destro() {return figlio_destro;};
                 COLOR Ritorna_Colore() {return colore;};
                 void Stampa_Voce() {cout<<"La parola e':"<<parola<<endl;
                                     cout<<"Il lemma corrispondente e':"<<lemma<<endl; 
                                     cout<<"Padre: "<<Ritorna_Padre()<<endl;
                                     cout<<"Figlio sx: "<<Ritorna_Figlio_Sinistro()<<endl;
                                     cout<<"Figlio dx: "<<Ritorna_Figlio_Destro()<<endl;}
                 void Modifica_Colore(COLOR c) {colore=c;};
                 void Carica_Parola(string p) {parola=p;};
                 void Carica_Lemma(string l) {lemma=l;};
                 void Carica_Nodo_Padre(Nodo_RB *pd) {padre=pd;};
                 void Carica_Nodo_Figlio_Sinistro(Nodo_RB *fs) {figlio_sinistro=fs;};
                 void Carica_Nodo_Figlio_Destro(Nodo_RB *fd) {figlio_destro=fd;};
                 };
    class Albero_Binario{
          protected: 
                     Nodo_RB *Radice;
                     Nodo_RB *NIL;
                   
    
          public:  Albero_Binario() { NIL=Nuovo_Albero(); Radice=NIL;};
                   
                   void scomponi(Nodo_RB*);
            //       ~Albero_Binario() {scomponi(Nodo_RB*);};
                   Nodo_RB* Ricerca_Lemma(Nodo_RB*,string p);
                   void Ricerca_Lemma1(string);
                   void Visita_Simmetrica(Nodo_RB*);
            //       Nodo_RB* Elimina_Nodo(Nodo_RB*,Nodo_RB*,Nodo_RB*);                  
                   Nodo_RB* Inserisci_Nodo(string,string);
            //       Nodo_RB* Successore(Nodo_RB*);
            //       Nodo_RB* Minimo(Nodo_RB*);
                   
                   };     
    
    Nodo_RB* Albero_Binario::Inserisci_Nodo(string par,string lemma)
    {    
         Nodo_RB *x,*y,*nuovo;//creazione 3 nodi di supporto
         y=NIL;//y vuoto
         x=Radice;        //x la radice
         nuovo=Nuovo_Albero();    //creazione nuovo albero
         cout<<"sono in inserisci_nodo:carico la parola"<<endl;
         nuovo->Carica_Parola(par);         //caricamento parola e lemma
         nuovo->Carica_Lemma(lemma);
         system("PAUSE");
         while(x!=NIL)
                      {   cout<<"nel while"<<endl;         
                      y=x;
                      system("PAUSE");
                      if(nuovo->Ritorna_chiave()<x->Ritorna_chiave())
                                                                     {cout<<"nel while 1"<<endl;
                                                                      x=x->Ritorna_Figlio_Sinistro();
                                                                      y=y->Ritorna_Figlio_Destro();
                                                                      };
         
         nuovo->Carica_Nodo_Padre(y);
         if(y==NIL) Radice=nuovo;
         
         else if(nuovo->Ritorna_chiave()<y->Ritorna_chiave())
                                                             y->Carica_Nodo_Figlio_Sinistro(nuovo);
         else y->Carica_Nodo_Figlio_Destro(nuovo);
        cout<<"Alla fine del caricamento"<<endl;
         };
         Visita_Simmetrica(Radice);
         cout<<"Uscita da inserisci_nodo"<<endl;
    };
    
                   
    
    x e y nonostante siano 2 puntatori sono allocati a 0 così non riesco ad entrare mai nel while.
    Grazie.
Devi accedere o registrarti per scrivere nel forum
3 risposte