C++ 静态向量不';不保存数据?

C++ 静态向量不';不保存数据?,c++,vector,static,stdvector,static-variables,C++,Vector,Static,Stdvector,Static Variables,我有点困惑。实际上,我从头文件在名称空间中声明了一个全局向量: namespace foo { ... static std::vector<T> vec; ... void append(T item) { vec.push_back(item); } T get(int index) { return vec[index]; } } 我有一个对话框: 显然,向量是空的。 我想问题在于它是静

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

namespace foo {
    ...
    static std::vector<T> vec;
    ...
    void append(T item) {
        vec.push_back(item);
    }
    T get(int index) {
        return vec[index];
    }
}
我有一个对话框:

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


我应该怎么做,为什么它会这样对我?

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

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

inline std::vector<T> vec;
inline std::vector vec;

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

如果我理解正确,那么我们必须确保该向量对于使用它的每个函数都是唯一的,以便具有相同的数据。我认为使用类将是一件好事,因为我在该名称空间中的函数围绕该向量旋转。谢谢:)PS:我的编译器是现代的(虽然还不是C++17),内联变量(仍然)不能工作。
inline std::vector<T> vec;