c++ - 静态 vector 不保存数据?

标签 c++ vector static stdvector static-variables

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

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

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

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

我有这个对话框:

enter image description here

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

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

最佳答案

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

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

inline std::vector<T> vec;

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

关于c++ - 静态 vector 不保存数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51803803/

相关文章:

c++ - 如何在fork之间共享数组?

java - 接口(interface)的静态和最终规则

c++ - 如何使用 Win32 解码 JPEG?

c++ - 如何使用 C++ 复制 SID 进行存储

C++ - 从字符串中提取数字

c++ - 分配给 char[8] 的 vector

c++ - 读取访问冲突,这是 nullptr 错误,未正确初始化?

c++ - 用字符串打印出 Vector

ios - 在 objective-c 中在哪里声明静态变量?

尝试使用 C++ const 静态成员初始化数组时未识别