静态向量不保存数据?

static vector doesn't save datas?

我有点困惑。事实上,我在头文件的命名空间中声明了一个全局向量:

namespace foo {
    ...
    static std::vector<T> vec;
    ...
    void append(T item) {
        vec.push_back(item);
    }
    T get(int index) {
        return vec[index];
    }
}

当我想在运行时恢复其中一个向量元素时:

foo::append(/* item */);
T ItemFromVec = foo::get(0);

我有这个对话框:

显然,向量是空的。 我想问题是它是 static,但如果它不是静态的,我会从链接器中得到错误。我也没有实现 .cpp 文件。

我该怎么办,为什么要这样对我?

static 说明符使编译器为每个翻译单元创建一个单独的变量。因此,很可能您在一个翻译单元中调用 append,然后在另一个翻译单元中调用 get,因此它们对不同的变量进行操作。

鉴于您可以使用现代编译器,您可以将变量标记为 inline:

inline std::vector<T> vec;

或者,更好的是,将其与函数一起包装到 class 中并用作私有静态 class 字段。