2012-01-24 4 views
2

Im am пытается инициализировать статический const нецелый. Однако для этого требуются частные параметры. Если бы это было интегрального типа вы могли бы поместить его в тело класса и позволяют разрешить одну переменную принимать значение другого т.е.Инициализировать статический const, нецелый, член класса с частным членом

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 :: х, Person :: у, Person :: радиан, Person :: цв выходит за рамки, поскольку они являются частными. Поскольку я инициализирую статический const, я бы хотел не поместить его в конструктор, который будет вызываться каждый раз, когда создается новый экземпляр.

Например

//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); 
} 

выше, кажется, однако работать я хочу, чтобы не использовать его по вышеуказанной причине.

Есть ли работа вокруг. Без привлечения членов общественности.

Благодаря

ответ

1

Добавить эту публичную функцию для вашего Person класса.

static const sf::Shape defaultShape(); 

Эта функция может одновременно получить доступ к закрытым переменным и инициализировать статический Shape переменную.

0

Не используйте статическое значение класса для вычисления других статических значений. В этом случае, если вы храните вещи в правильном порядке (Static variables initialisation order)

Дизайн ваших классов подозрительный. Если x, y, rad, col используются только в круге, может быть лучше просто инициализировать свой круг по умолчанию и вообще не иметь этих переменных.

изменение

static const float x ; 

в

static float x() { return 0 ; } 

т.д.

Смежные вопросы