代码之家  ›  专栏  ›  技术社区  ›  tunnuz

如何在C++源文件之间共享静态变量?

  •  3
  • tunnuz  · 技术社区  · 16 年前

    我不知道这样做是否可行,但我试了好几种方法,似乎都没有效果。基本上,我需要从几个包含相同类定义的文件中访问相同的静态成员。

    // 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文件是否正在创建静态类的本地副本?

    谢谢你 托马索

    1 回复  |  直到 16 年前
        1
  •  12
  •   interjay    16 年前

    这条线:

    int S::foo = 0;
    

    必须正好在一个源文件中,而不是在头文件中。所以把它从 S.h S.cpp .