c++ - 静态成员变量的链接错误。在模板结构中
问题描述
我有点好奇模板结构成员有什么特别之处。特别是,我似乎无法在模板类/结构中定义未初始化的静态成员。
请注意,以下代码段没有链接,带有未定义的引用Struct<int>::member
template <typename T>
struct Struct {
static T member;
};
template <typename T>
T foo(T t) {
return Struct<T>::member = t;
}
template struct Struct<int>;
template <>
int Struct<int>::member;
int main() {
return foo(1);
}
然而,看似等价的
struct StructInt {
static int member;
};
int foo(int t) {
return StructInt::member = t;
}
int StructInt::member;
int main() {
return foo(1);
}
编译没有错误。
解决方案
似乎这条线
template <>
int Struct<int>::member;
只声明变量,而不是定义它。将其更改为
template <>
int Struct<int>::member = 0;
解决链接器错误。
你也可以使用
template <typename T>
T Struct<T>::member;
解决链接器错误。