静态向量不保存数据吗?

时间:2018-08-11 21:14:38

标签: 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];
    }
}

当我想在运行时恢复矢量元素之一时:

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

我有这个对话框:

enter image description here

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

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

1 个答案:

答案 0 :(得分:1)

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

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

inline

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