Ошибка объявления констант с плавающей точкой - PullRequest
0 голосов
/ 04 февраля 2012

Я объявляю класс, которому нужны некоторые публичные константы. Моя идея была объявить так:

class MyClass {
 public:
  const int kIntConst = 1234;
  const float kFloatConst = 1234.567f;
  // ...methods...
};

Этот подход прекрасно работает для int константы, но не работает для float со следующей ошибкой:

error C2864: 'MyClass::kFloatConst' : only static const integral data members can be initialized within a class

Ну, я делаю понимаю это сообщение об ошибке. Он говорит, что я не могу иметь константу с плавающей точкой (нецелую), объявленную в объявлении класса. Итак, вопрос: ПОЧЕМУ !? Почему это может быть int, а не float?

Я знаю, как обойти это. Объявление kFloatConst в качестве статического константного члена и последующая инициализация в .cpp решает проблему, но это не то, что я хотел бы иметь. Мне нужна константа времени компиляции (та, которая может быть оптимизирована компилятором), а не член класса константы, который нуждается в связывании файла .obj.

Можно использовать макрос, но макрос не имеет пространства имен, и мне не нравятся глобально определенные константы.

1 Ответ

2 голосов
/ 04 февраля 2012

Общее правило заключается в том, что вы не можете иметь константы, определенные внутри объявления класса.

Тогда есть исключение, что интегральные константы в любом случае разрешены . Таким образом, константа int является не правилом, а исключением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...