header — Назначение значений для const int в headerfile в c ++ без списка инициализации

Я получил 17 целочисленных констант, которые я хотел бы иметь как частные в своем классе. Действительно ли необходимо использовать список инициализации?

Я где-то читал, что могу присвоить значения константам в заголовочном файле, но, похоже, это не работает. Я получаю это сообщение об ошибке:

sorry, unimplemented: non-static data member initializers

0

Решение

Действительно ли необходимо использовать список инициализации?

В современном (эра 2011 года) C ++ нет. В старых версиях языка да.

Ваше сообщение об ошибке приносит извинения за то, что ваш компилятор еще не поддерживает новый синтаксис инициализации для нестатических элементов. Предполагая, что вы используете GCC (так как я распознаю эту ошибку от этого компилятора), то в соответствии с эта страница вам нужно будет обновить эту версию до версии 4.7.

В качестве альтернативы, поскольку они являются частными и постоянными, вы можете рассмотреть возможность их перемещения из класса в локальное пространство имен в файле реализации класса. Конечно, это будет работать, только если вам не нужен доступ к ним из каких-либо встроенных функций-членов.

Наконец, если они имеют одинаковые значения для всех экземпляров класса (что, вероятно, так как они const и вы можете инициализировать их независимо от аргументов конструктора), вы можете объявить их static, Затем они могут быть инициализированы в своем объявлении (хотя старые компиляторы могут разрешить это, только если они имеют целочисленный тип). Однако, если они УСО используемый (грубо говоря, если вам нужно взять указатель или ссылку на них), то они также должны быть определены точно в одном исходном файле.

4

Другие решения

.час:

class MyClass {
public:
MyClass();
~MyClass();

int doSomething();

private:
const int m_newint = 1;
const int m_dosomething = 2;
};

.куб.см:

MyClass::MyClass() {}
MyClass::~MyClass() {}

int MyClass::doSomething() {
return m_dosomething;
}

Действительный код C ++ 11, убедитесь, что ваш компилятор установлен на -std=c++11 использовать
особенность.

0

По вопросам рекламы [email protected]