2012-03-30 1 views
1

je classe A tel que:Utilisation des variables statiques d'une classe C++ dans plusieurs fichiers

class A { 
    static int i; 
    A(); 
    f1(); 
    f2(); 
    static void intitiaize(); 
    // snipped rest 
} 

void initialize() { 
    A::i = 0; 
} 

dans un fichier d'en-tête.

J'ai une fonction intiialize pour la classe qui initialise les variables statiques dans la méthode principale dans le second fichier. Après cela, je crée un objet de A pour appeler a.f1().

Lorsque j'essaie de créer un autre objet de A dans le fichier trois le compilateur se plaint en disant "aucune référence à la classe A". Donc inclus l'en-tête dans ce troisième fichier.

Je reçois une erreur à propos de plusieurs définitions de A.

Comment dois-je procéder? J'ai inclus des gardes autour du fichier de classe.

+0

J'ai ajouté INITIE int A :: i = 0 à la fin de ..just classe manqué ici –

Répondre

2

Vous voulez une déclaration de A::i dans l'en-tête (et vous pouvez vous débarrasser de votre initialize():

//whatever.h: 
class A{ 
    static int i; 
    A(); 
    f1(); 
    f2(); 
    ... 
}; // don't forget the semicolon on the end. 

Ensuite, vous avez besoin d'une définition de la variable dans un fichier RPC:

// whatever.cpp: 
int A::i = 0; 

Ensuite, incluez l'en-tête où vous allez utiliser les objets de la classe, et compilez simplement le fichier .CPP et reliez-le avec les autres qui utilisent cette classe

+0

merci .. trouvé une autre erreur n mon code .. et stupide chose que j'avais fait était de donner fonction defn dans les fichiers d'en-tête .. cela a encore une fois causé un problème parce que le même defn était inclus dans les deux fichiers c .. –

0

Avec les nombres entiers const, vous pouvez réellement l'initialiser dans l'en-tête. Cela inclut les types bool et char. L'approche de Jerry fonctionnera avec n'importe quel type et si ce n'est pas const.

class A{ 
     static const int i = 0; 
     ... 
    } 
+0

Vous avez raison, l'a changé en conséquence. Cette [question] (http://stackoverflow.com/questions/185844/initializing-private-static-members) donne plus de détails sur le problème. – kossmoboleat

Questions connexes