我对模板结构成员的特殊之处感到好奇。特别是,似乎我无法在模板类/结构中定义未初始化的静态成员。
请注意,以下代码段未链接,但未引用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);
}
编译没有错误。
答案 0 :(得分:1)
似乎这条线
template <>
int Struct<int>::member;
只声明变量,不定义它。更改为
template <>
int Struct<int>::member = 0;
解决链接器错误。
您也可以使用
template <typename T>
T Struct<T>::member;
解决链接器错误。