我有点困惑。实际上,我在头文件的命名空间中声明了一个全局 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);
我有这个对话框:
显然, vector 是空的。
我想问题在于它是 static
,但如果它不是静态的,我会从链接器中得到错误。我也没有实现 .cpp 文件。
我该怎么办,为什么要这样对我?
最佳答案
static
说明符使编译器为每个翻译单元创建一个单独的变量。因此,很可能您在一个翻译单元中调用 append
,然后在另一个翻译单元中调用 get
,以便它们对不同的变量进行操作。
鉴于您可以使用现代编译器,您可以将变量标记为内联
:
inline std::vector<T> vec;
或者,更好的是,将其与函数一起包装到类中并用作私有(private)静态类字段。
关于c++ - 静态 vector 不保存数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51803803/