这初始化它是我现在有:声明这个类声明中一个类的实例,并就地
class CColorf
{
public:
CColorf();
CColorf(float r, float g, float b, float a = 1.0f);
public:
float r, g, b, a;
// predefined colors
// rgb(0.0, 0.0, 1.0)
static const CColorf blue;
};
它的工作原理与ccolorf.cpp定义像这样blue
:
CColorf const CColorf::blue = CColorf(0.0f, 0.0f, 1.0f);
这是我想要做的是什么:
class CColorf
{
...
// predefined colors
// rgb(0.0, 0.0, 1.0)
static const CColorf blue = CColorf(0.0f, 0.0f, 1.0f);
};
但它会产生一个编译错误:
a static data member with an in-class initializer must have non-volatile const integral type
有没有办法避免这里需要单独的声明和定义?
声明吧'constexpr'。 'CColof'是一种文字类型,因此应该可以工作。 – Columbo 2015-02-05 14:56:07
@Columbo:不是'constexpr'应该用于表达式(或函数),而不是声明? – 2015-02-05 14:57:22
...不知道你的意思,但你听起来很迷惑。 'constexpr'是一个decl-specifier(声明说明符),因此只能在声明中使用。 – Columbo 2015-02-05 14:59:02