Как инициализировать переменную-член const класса с помощью переменной const? - PullRequest
3 голосов
/ 11 апреля 2019

Я должен прочитать строки из файла .txt и хочу инициализировать с ним членов моего класса. Первый символ в строке всегда является числом.

class myClass{

  private:
    const int ID;

  public:
    myClass(const int id){
       this->ID =  id;
    }

};

Это дает мне «Не предоставляет инициализатор для Kontakt :: ID» для конструктора, а «выражение должно быть изменяемым Ivalue» для this->ID = id;

Ответы [ 2 ]

4 голосов
/ 11 апреля 2019

Вы должны инициализировать const членов класса в списке инициализаторов .Вот полный пример (см. online ):

class myClass {
  private:
    const int ID;
  public:
    myClass(const int id) : ID(id) {
                         // ^^^^^^
    }

};

int main() {
    myClass x(42);
}

Проблема в том, что инициализация в теле конструктора слишком поздняя, ​​все члены области видимости класса будут пытаться инициализироваться перед кодомв теле выполняется, и инициализация по умолчанию для переменной члена класса const отсутствует.

Если вы действительно хотите инициализацию по умолчанию, вы можете сделать это так (пример online ):

class myClass {
  private:
    const int ID = -42; // <<<
  public:
    myClass() = default; // <<<
    myClass(const int id) : ID(id) {
    }

};

int main() {
    myClass x;
}
4 голосов
/ 11 апреля 2019

Для этого вы должны использовать список инициализаторов :

myClass(const int id)
    : ID(id) { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...