PDA

Visualizza la versione completa : [C++] Inizializzazione variabile statica all'interno di una classe


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:

oregon
08-11-2008, 11:35
Ma il file che hai mostrato e' il file

animale.h

?

E se e' cosi', perche' lo includi

#include "animale.h"

??

Cell
08-11-2008, 11:44
Effettivamente forse non ci voleva (ho iniziato ieri a riprendere il C++ dopo qualche anno di fermo).
Grazie per avermelo fatto notare, anche se in ogni caso, anche correggendo l'errore permane (ed altre classi funzionanti, pur facendo questo sbaglio non ne soffrivano).

oregon
08-11-2008, 12:05
Ma di quale errore parli?

shodan
08-11-2008, 12:55
Originariamente inviato da Cell
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).

Si, è corretto. Soltanto se la classe è un template, l'inizializzazione della variabile statica può stare nell'header.

Cell
08-11-2008, 12:59
Originariamente inviato da shodan
Si, è corretto. Soltanto se la classe è un template, l'inizializzazione della variabile statica può stare nell'header.
Perfetto! Grazie mille! :)

:yuppi:

Loading