Статические константные члены в классе C ++ - PullRequest
0 голосов
/ 22 сентября 2011

Как объявить значения статических констант в 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 ]

6 голосов
/ 22 сентября 2011
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]).

Если вам нужно этодля модуля только для заголовка, то есть прием на основе шаблона, который сделает это за вас - но лучше спросите об этом отдельно, если вам это нужно.

Приветствия & hth.,

1 голос
/ 22 сентября 2011

Вам нужно инициализировать статические члены вне объявления класса.

...