2010-04-15 7 views
3

Je ne sais pas si c'est possible de le faire, mais j'ai essayé plusieurs façons et rien ne semble fonctionner. Fondamentalement, j'ai besoin d'accéder au même membre statique à partir de plusieurs fichiers qui incluent la même définition de classe.Comment partager une variable statique entre des fichiers source C++?

// Filename: S.h 

class S { 
public: 
    static int foo; 

    static void change(int new_foo) { 
     foo = new_foo; 
    } 

}; 

int S::foo = 0; 

Puis, dans une définition de classe (autre fichier .cpp) J'ai:

// Filename: A.h 

#include "S.h"  

class A { 
public: 
    void do_something() { 
     S::change(1); 
    } 
}; 

Et dans un autre fichier:

// Filename: program.cpp 

#include "S.h" 
#include "A.h" 

int main (int argc, char * const argv[]) { 
    A a = new A(); 
    S::change(2);   

    std::cout << S::foo << std::endl; 

    a->do_something(); 

    std::cout << S::foo << std::endl; 

} 

Maintenant, je me attends le deuxième appel de fonction changez le S :: foo à 1, mais la sortie est toujours:

2 

Le fichier A.h crée-t-il une copie locale de la classe statique?

Merci Tommaso

Répondre

12

Cette ligne:

int S::foo = 0; 

a besoin d'être dans exactement un fichier source, pas dans l'en-tête. Alors déplacez-le de S.h à S.cpp.

+0

Encore une fois, vous étiez plus rapide :-) –

+1

Ce qui veut dire qu'il ne devrait pas être dans l'en-tête. –

+0

Super, merci. Je lisais juste http://www.acm.org/crossroads/xrds2-4/ovp.html et trouvais la même solution, mais merci quand même, vous méritez la réponse acceptée :) – tunnuz

Questions connexes