2010-04-15 212 views
3

我不知道是否可以做到这一点,但我尝试了几种方法,似乎没有任何工作。基本上我需要从几个包含相同类定义的文件访问相同的静态成员。如何在C++源文件之间共享静态变量?

// Filename: S.h 

class S { 
public: 
    static int foo; 

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

}; 

int S::foo = 0; 

然后在类定义(其它.cpp文件)我有:

// Filename: A.h 

#include "S.h"  

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

而在另一个文件:

// 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; 

} 

现在,我希望第二个函数调用将S :: foo更改为1,但输出仍为:

2 

A.h文件是否创建静态类的本地副本?

谢谢 托马索

回答

12

这条线:

int S::foo = 0; 

需要在一个源文件,而不是在头部。所以把它从S.h移到S.cpp

+0

+1该死的,你快:-) – 2010-04-15 14:42:54

+1

也就是说它不应该在标题中。 – 2010-04-15 14:44:09

+0

太好了,谢谢。我只是阅读http://www.acm.org/crossroads/xrds2-4/ovp.html,并找到相同的解决方案,但无论如何,你应该得到公认的答案:) – tunnuz 2010-04-15 14:44:43