Cell
08-11-2008, 11:26
Salve!
Sto scrivendo una classe con una variabile membro statica (ovvero una variabile di classe), ma non ho ben capito dove fare la prima inizializzazione.
Ho cercato un po' e ho visto che andrebbe fatta o all'inizio del file .cpp col main oppure nel file .h (dopo la definizione della struttura interna della classe). Nel primo caso (all'inizio del file con il main) l'inizializzazione funziona senza problemi. Tuttavia non ritengo corretto che sia l'utilizzatore della classe a settare la variabile statica, ma chi realizza la classe. Ho quindi provato a mettere l'inizializzazione dopo aver definito la classe (nel file .h), ma mi dà errore.
In alternativa, anche se non l'ho trovato scritto da nessuna classe, ho messo l'inizializzazione all'inizio del file .cpp dove implemento le funzioni membro della classe, e non mi dà alcun problema (ma non so se sia corretto).
Vi posto il file .h, come lo vorrei scrivere io con l'inizializzazione della variabile statica, che mi dà problema.
#ifndef _ANIMALE_H_
#define _ANIMALE_H_
#include "animale.h"
class Animale
{
public:
Animale(const char* NOME,const int ETA,const char* SP);
~Animale();
virtual void verso() const=0;
void scheda() const;
static void leggiConteggio();
private:
char* nome;
int eta;
char* sp; //segni particolari
static int count;
};
int Animale::count=0; // E' QUESTA L'INIZIALIZZAZIONE CHE DA' PROBLEMI!!!
#endif
L'errore che mi dà:
multiple definition of `Animale::count'
first defined here
ld returned 1 exit status
:confused:
Sto scrivendo una classe con una variabile membro statica (ovvero una variabile di classe), ma non ho ben capito dove fare la prima inizializzazione.
Ho cercato un po' e ho visto che andrebbe fatta o all'inizio del file .cpp col main oppure nel file .h (dopo la definizione della struttura interna della classe). Nel primo caso (all'inizio del file con il main) l'inizializzazione funziona senza problemi. Tuttavia non ritengo corretto che sia l'utilizzatore della classe a settare la variabile statica, ma chi realizza la classe. Ho quindi provato a mettere l'inizializzazione dopo aver definito la classe (nel file .h), ma mi dà errore.
In alternativa, anche se non l'ho trovato scritto da nessuna classe, ho messo l'inizializzazione all'inizio del file .cpp dove implemento le funzioni membro della classe, e non mi dà alcun problema (ma non so se sia corretto).
Vi posto il file .h, come lo vorrei scrivere io con l'inizializzazione della variabile statica, che mi dà problema.
#ifndef _ANIMALE_H_
#define _ANIMALE_H_
#include "animale.h"
class Animale
{
public:
Animale(const char* NOME,const int ETA,const char* SP);
~Animale();
virtual void verso() const=0;
void scheda() const;
static void leggiConteggio();
private:
char* nome;
int eta;
char* sp; //segni particolari
static int count;
};
int Animale::count=0; // E' QUESTA L'INIZIALIZZAZIONE CHE DA' PROBLEMI!!!
#endif
L'errore che mi dà:
multiple definition of `Animale::count'
first defined here
ld returned 1 exit status
:confused: