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

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

以上似乎可行,但出于上述原因我不希望使用它。

有解决办法吗。在不公开成员的情况下。

谢谢

4

2 回答 2

1

将此公共功能添加到您的Person课程中。

static const sf::Shape defaultShape();

此函数既可以访问私有变量,也可以初始化您的静态Shape变量。

于 2012-01-24T20:48:20.093 回答
0

不要使用类中的静态值来计算其他静态值。在这种情况下,如果您保持正确的顺序(静态变量初始化顺序) ,这是可能的

你的类的设计是可疑的。如果 x,y,rad,col 仅用于圆形,则最好只初始化默认圆形而不使用这些变量。

改变

static const float x ;

进入

static float x() { return 0 ; }

等等

于 2012-01-24T21:02:39.187 回答