静的定数を非整数で初期化しようとしています。ただし、プライベートなパラメータが必要です。整数型の場合は、クラス本体に配置して、ある変数が別の変数の値を取ることができるようにすることができます。
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);
}
上記はうまくいくようですが、上記の理由で使用したくありません。
回避策はありますか?メンバーを公開せずに。
ありがとう