【问题标题】:How to share a static variable between C++ source files?如何在 C++ 源文件之间共享静态变量?
【发布时间】:2011-02-08 10:16:41
【问题描述】:

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

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

谢谢 托马索

【问题讨论】:

    标签: c++ file class static scope


    【解决方案1】:

    这一行:

    int S::foo = 0;
    

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

    【讨论】:

    • 也就是说它不应该在标题中。
    • 太好了,谢谢。我刚刚阅读acm.org/crossroads/xrds2-4/ovp.html 并找到了相同的解决方案,但无论如何,谢谢,你应该得到接受的答案:)
    • 将方法代码放在头部有什么缺点吗?
    • 如果多个源文件包含该头文件(通常是这种情况),该变量将被定义两次,这取决于上下文可能导致从编译器错误到大量令人困惑的错误的任何事情。跨度>
    • 将方法代码放在头文件中的一些缺点: 1. 编译时间可能更长。 2.任何需要的#includes也需要放在标题中。
    猜你喜欢
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多