静态向量不保存数据?
static vector doesn't save datas?
我有点困惑。事实上,我在头文件的命名空间中声明了一个全局向量:
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 文件。
我该怎么办,为什么要这样对我?
static
说明符使编译器为每个翻译单元创建一个单独的变量。因此,很可能您在一个翻译单元中调用 append
,然后在另一个翻译单元中调用 get
,因此它们对不同的变量进行操作。
鉴于您可以使用现代编译器,您可以将变量标记为 inline
:
inline std::vector<T> vec;
或者,更好的是,将其与函数一起包装到 class 中并用作私有静态 class 字段。
我有点困惑。事实上,我在头文件的命名空间中声明了一个全局向量:
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 文件。
我该怎么办,为什么要这样对我?
static
说明符使编译器为每个翻译单元创建一个单独的变量。因此,很可能您在一个翻译单元中调用 append
,然后在另一个翻译单元中调用 get
,因此它们对不同的变量进行操作。
鉴于您可以使用现代编译器,您可以将变量标记为 inline
:
inline std::vector<T> vec;
或者,更好的是,将其与函数一起包装到 class 中并用作私有静态 class 字段。