2012-01-24 121 views
2

我正試圖初始化一個靜態常量非整數。但它需要私有的參數。如果是整體式的,你可以把它放在類體,並允許讓一個變量採取的另一個即價值使用私有成員初始化靜態常量非整型類成員

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

人:: X,人:: Y,人::弧度,人::山口超出範圍,因爲它們是私有的。 當我初始化一個靜態常量時,我​​不希望把它放在每次創建新實例時都會調用的構造函數中。

例如

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