Объявления членов статических данных в объявлении класса не являются их определением.
Чтобы определить их, вы должны сделать это в файле .CPP
, чтобы избежать дублирования символов.
Единственные данные, которые вы можете объявить и определить, - это целочисленные статические константы.
(Значения enums
также могут использоваться как постоянные значения)
Возможно, вы захотите переписать ваш код как:
class test {
public:
const static unsigned char X = 1;
const static unsigned char Y = 2;
...
test();
};
test::test() {
}
Если вы хотите иметь возможность изменять ваши статические переменные (другими словами, когда нецелесообразно объявлять их как const), вы можете разделить код между .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.
}