C ++类中的静态常量成员

时间:2011-09-22 10:09:55

标签: c++ oop static constants

如何在C ++中声明静态常量值? 我希望能够获得常量Vector3 :: Xaxis,但我不能改变它。

我在另一个类中看到了以下代码:

const MyClass MyClass::Constant(1.0);

我试着在班上实现这个:

static const Vector3 Xaxis(1.0, 0.0, 0.0);

但是我收到了错误

math3d.cpp:15: error: expected identifier before numeric constant
math3d.cpp:15: error: expected ‘,’ or ‘...’ before numeric constant

然后我尝试了一些类似于我在C#中所做的事情:

static Vector3 Xaxis = Vector3(1, 0, 0);

但是我得到了其他错误:

math3d.cpp:15: error: invalid use of incomplete type ‘class Vector3’
math3d.cpp:9: error: forward declaration of ‘class Vector3’
math3d.cpp:15: error: invalid in-class initialization of static data member of non-integral type ‘const Vector3’

到目前为止,我班级的重要部分看起来像这样

class Vector3
{
public:
    double X;
    double Y;
    double Z;

    static Vector3 Xaxis = Vector3(1, 0, 0);

    Vector3(double x, double y, double z)
    {
        X = x; Y = y; Z = z;
    }
};

我如何实现我在这里要做的事情?要有一个Vector3 :: Xaxis,它返回Vector3(1.0,0.0,0.0);

2 个答案:

答案 0 :(得分:6)

class Vector3
{
public:
    double X;
    double Y;
    double Z;

    static Vector3 const Xaxis;

    Vector3(double x, double y, double z)
    {
        X = x; Y = y; Z = z;
    }
};

Vector3 const Vector3::Xaxis(1, 0, 0);

请注意,最后一行是定义,应该放在实现文件中 (例如[.cpp]或[.cc])。

如果你需要这个仅用于标题的模块,那么就有一个基于模板的技巧 为你做这件事 - 但如果你需要的话,最好另外询问一下。

干杯&第h。,

答案 1 :(得分:1)

您需要在类声明之外初始化静态成员。