Неразрешенный внешний символ для статических членов класса

Объявления статических элементов class данных в объявлении класса cxx не являются их определением. Чтобы members определить их, вы должны classes сделать это в файле .CPP, чтобы cpp избежать дублирования символов.

Единственные c++ данные, которые вы можете class объявлять и определять, - это cpp интегральные статические members константы. (Значения enums также static-vs-non-static могут использоваться как classes постоянные значения)

Возможно, вы members захотите переписать свой static-vs-non-static код как:

class test {
public:
  const static unsigned char X = 1;
  const static unsigned char Y = 2;
  ...
  test();
};

test::test() {
}

Если вы хотите иметь members возможность изменять свои static статические переменные (другими static словами, когда неуместно cpp объявлять их как const), вы static можете разделить свой код members между .H и .CPP следующим образом:

.H:

class test {
public:

  static unsigned char X;
  static unsigned char Y;

  ...

  test();
};

.CPP:

unsigned char test::X = 1;
unsigned char test::Y = 2;

test::test()
{
  // constructor is empty.
  // We don't initialize static data member here, 
  // because static data initialization will happen on every constructor call.
}

c++

class

static

members

2022-10-21T09:36:25+00:00