Ошибка ссылки для статического члена variable.in в структуре шаблона - PullRequest
0 голосов
/ 07 ноября 2018

Мне немного любопытно, что особенного в элементах структуры шаблона. В частности, кажется, что я не могу определить неинициализированные статические члены в шаблонных классах / структурах.

Обратите внимание, что следующий фрагмент не связывает, с неопределенной ссылкой на 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 голосов
/ 07 ноября 2018

Кажется, линия (ы)

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

просто объявите переменную, а не определите ее. Меняя его на

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

устраняет ошибку компоновщика.

Вы также можете использовать

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

для устранения ошибки компоновщика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...