【问题标题】:static vector doesn't save datas?静态矢量不保存数据?
【发布时间】:2019-01-19 02:10:03
【问题描述】:

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

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 文件。

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

【问题讨论】:

    标签: c++ vector static stdvector static-variables


    【解决方案1】:

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

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

    inline std::vector<T> vec;
    

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

    【讨论】:

    • 如果我理解正确,那么我们必须确保该向量对于使用它的每个函数都是唯一的,以便获得相同的数据。我认为使用类将是一件好事,因为我在该命名空间中的函数围绕该向量展开。谢谢 :) PS:我的编译器是现代的(虽然还不是 C++17),内联变量(仍然)不起作用。
    猜你喜欢
    • 2012-05-23
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 2022-10-19
    • 2013-08-05
    • 2014-01-26
    相关资源
    最近更新 更多