2012-01-24 85 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 ; }