2015-10-14 5 views
-2

Я хочу иметь int, связанный с моим классом, который устанавливается, когда пользователь этого класса создает экземпляр.Невозможно инициализировать private const member

class MyClass { 
public: 
    MyClass(int x); 
private: 
    const int x; 
}; 

Чтобы инициализировать эту константу, я стараюсь использовать застройщик (Java стиль):

MyClass::MyClass(int x) { 
    this->x = x; 
} 

Однако мой компилятор не совсем, как это так, и я получаю следующее:

const.cxx: In constructor ‘MyClass::MyClass(int)’: 
const.cxx:3:1: error: uninitialized const member in ‘const int’ [-fpermissive] 
MyClass::MyClass(int x) { 
^ 
In file included from const.cxx:1:0: 
const.h:8:13: note: ‘const int MyClass::x’ should be initialized 
    const int x; 
      ^
const.cxx:4:11: error: assignment of read-only member ‘MyClass::x’ 
    this->x = x; 
     ^

Что такое C++ способ инициализации созданной константы на основе конструктора a la Java?

EDIT: Я видел вопрос, обозначенный как дубликат; этот поток не упомянул, что вы можете использовать параметры конструктора в списке инициализаторов, поскольку он использует только числовые литералы во всех примерах.

+1

Используйте символ [Инициализатор список] (http://en.cppreference.com/w/cpp/language/initializer_list): 'MyClass :: MyClass (int x): x (x) {}' – Biffen

+3

И BTW, используйте это для не-const-членов тоже ... –

+0

Используйте _initialization_, а не назначение. – emlai

ответ

3

Вы можете использовать то, что называется список инициализатора в подписи функции конструктора:

MyClass::MyClass(int x) : x(x) { 
} 
Смежные вопросы