Membro Static class

di il
5 risposte

Membro Static class

Ho un problema con una variabile static all'interno della mia classe:
class Persona{
      private:
              char *Nome;
              char *Cognome;
              int Eta;
              static int Num_Pers;
      public:
             Persona(){
                       Nome=NULL;
                       Cognome=NULL;
                       Eta=0;
                       Num_Pers ++;
                       }
             Persona(char *N, char *C, int E){
                          Nome=N;
                          Cognome=C;
                          Eta=E;
                          Num_Pers ++;
                          };
             ~Persona(){
                        delete Nome;
                        delete Cognome;
                        Num_Pers --;
                        };
             int printn(){ return Num_Pers;};
             };
Il Devc++ mi da: " [Linker error] undefined reference to `Persona::Num_Pers' ", why? =(
Grazie mille in anticipo a tutti =)

5 Risposte

  • Re: Membro Static class

    Non sono esperto ma forse perché non hai inizializzato la variabile num pers
    Sent from my RM-846_eu_italy_307 using Tapatalk
  • Re: Membro Static class

    Ciao,
    il problema è trattato qui.
  • Re: Membro Static class

    Rossimelthomas: Le variabili static si inizializzano automaticamente a 0 quando il programma viene lanciato.
    minomic: ok, grazie mille per la soluzione, ma perchè c'è bisogno di ridichiarare la variabile int? Cioè, non capisco il senso!
  • Re: Membro Static class

    Scrivendo "static int ..." hai solo dichiarato la variabile, cioè hai "annunciato la sua presenza". Invece manca la definizione della variabile, che comprende l'allocazione della memoria, ecc. A tal proposito ti consiglio di leggere qui.
  • Re: Membro Static class

    Uno crede di avere le basi, e poi scopre che gli mancano questi concetti banali xD
    Approposito di basi, avrei un altro problema con la medesima classe (che ora ho modificato):
    class Persona{
          private:
                  char *Nome;
                  char *Cognome;
                  int Eta;
                  static int Num_Pers;
          public:
                 Persona(){
                           Nome=new char;
                           Cognome=new char;
                           Eta=0;
                           Num_Pers ++;
                           }
                 ~Persona(){
                            delete Nome;
                            delete Cognome;
                            Num_Pers --;
                            };
                 void add_data(char &N, char &C, int E){
                              Nome=&N;
                              Cognome=&C;
                              Eta=E;
                              };
                 int printn(){ return Num_Pers;};
                 };
    Perchè il distruttore mi da errore nel delete Nome? Come se non puntasse a nulla, in quanto se prima del delete aggiungo un'assegnazione, mi funge benissimo. Non capisco davvero dove sta l'errore dato che comunque per il membro Cognome poi funziona tutto alla perfezione
Devi accedere o registrarti per scrivere nel forum
5 risposte