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

4
我不确定是否可能做到这一点,但我已经尝试了几种方法,似乎都没有成功。基本上,我需要从包括相同类定义的多个文件中访问同一个静态成员。
// 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文件是否创建了静态类的本地副本?

谢谢 Tommaso

1个回答

13

这一行:

int S::foo = 0;

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


1
也就是说它不应该在头文件中。 - Jukka Dahlbom
太好了,谢谢。我刚刚在阅读http://www.acm.org/crossroads/xrds2-4/ovp.html时发现了相同的解决方案,但还是感谢你,你应该得到采纳的答案 :) - tunnuz
将方法代码放在头文件中有什么缺点吗? - tunnuz
将方法代码放在头文件中的一些缺点:1. 可能会导致更长的编译时间。2. 任何需要的 #includes 也需要放在头文件中。 - interjay
@tunnuz,还可以使用守卫来避免多次包含,你的主程序两次包含了"s.h"。 - sud03r
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接