首页 > 解决方案 > 静态成员变量的链接错误。在模板结构中

问题描述

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

请注意,以下代码段没有链接,带有未定义的引用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);
}

编译没有错误。

标签: c++templatesstatic

解决方案


似乎这条线

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

只声明变量,而不是定义它。将其更改为

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

解决链接器错误。

你也可以使用

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

解决链接器错误。


推荐阅读