模板结构中静态成员变量的链接错误

时间:2018-11-06 23:02:12

标签: c++ templates static

我对模板结构成员的特殊之处感到好奇。特别是,似乎我无法在模板类/结构中定义未初始化的静态成员。

请注意,以下代码段未链接,但未引用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);
}

编译没有错误。

1 个答案:

答案 0 :(得分:1)

似乎这条线

template <>
int Struct<int>::member;

只声明变量,不定义它。更改为

template <>
int Struct<int>::member = 0;

解决链接器错误。

您也可以使用

template <typename T>
T Struct<T>::member;

解决链接器错误。