Я пытаюсь инициализировать статический констант нецелым. Однако это требует параметров, которые являются частными. Если бы он имел целочисленный тип, вы могли бы поместить его в тело класса и позволить одной переменной принимать значение другой, т.е.
static const int A=0;
static const int B=A;
Но поскольку он не является интегральным, он должен быть инициализирован вне тела класса, но поскольку члены являются частными, они находятся вне области видимости вне тела класса.
Например
//HEADER
class Person
{
static const float x;
static const float y;
static const int rad;
static const sf::Color col;
static const sf::Shape shape;
};
//CPP
const float Person::x=0;
const float Person::y=0;
const int Person::rad=16;
const sf::Color Person::col(255,0,0,255);
const sf::Shape shape=sf::Shape::Circle(Person::x,Person::y,Person::rad,Person::col);
Person :: x, Person :: y, Person :: rad, Person :: col находится вне области видимости, поскольку они являются частными.
Поскольку я инициализирую статический констант, я бы не хотел помещать его в конструктор, который будет вызываться каждый раз, когда создается новый экземпляр.
Например
//HEADER
class Person
{
static const float x;
static const float y;
static const int rad;
static const sf::Color col;
static const sf::Shape shape;
Person();
};
//CPP
const float Person::x=0;
const float Person::y=0;
const int Person::rad=16;
const sf::Color Person::col(255,0,0,255);
Person::Person()
{
const sf::Shape shape=sf::Shape::Circle(x,y,rad,col);
}
Кажется, что вышеприведенное работает, но я не хочу использовать его по вышеуказанной причине.
Есть ли обходной путь? Без обнародования членов.
Спасибо