我有点困惑。确实,我在头文件的命名空间中声明了一个全局向量:
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文件。
我该怎么办,为什么要对我这样做?
答案 0 :(得分:1)
I am a vendor
说明符使编译器为每个翻译单元创建一个单独的变量。因此,很可能您在一个翻译单元中调用static
,然后在另一翻译单元中调用append
,以便它们对不同的变量进行运算。
鉴于您可以使用现代编译器,可以将变量标记为get
:
inline
或者更好的是,将其与函数一起包装到类中,并用作私有静态类字段。