Установить переменную-член const int вне класса (C ++) - PullRequest
0 голосов
/ 06 октября 2018

Допустим, это в Foo.h:

class Foo {
    private:
        const int MAXIMUM;
}

Как мне инициализировать MAXIMUM на определенное значение (в нашем случае 100) в файле Foo.cpp?Я попытался

Foo::Foo() {
    MAXIMUM = 100;
}

и получил ошибку "выражение должно быть изменяемым lvalue".Затем я попытался

const int Foo::MAXIMUM = 100;

и получил ошибку «Нестатический элемент данных не может быть определен вне его класса».И это в основном отвечает на мой вопрос как «это просто невозможно», но это просто означает, что мой университет испортил заголовочный файл.Итак, это возможно или нет?

Примечание: это университетское задание, поэтому я не могу изменить файл заголовка.Я предполагаю, что логическим решением было бы установить MAXIMUM на 100 в заголовочном файле.

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

Вы можете инициализировать переменные const двумя способами

При инициализации строки

class Foo {
    private:
        const int MAXIMUM = 100;
};

Использование списка инициализации

class Foo {
    Foo() 
    : MAXIMUM(100) {
    }

    Foo(const int MAXIMUM) 
    : MAXIMUM(MAXIMUM) {
    }

    private:
        const int MAXIMUM;
}

В приведенном ниже параметре enter code here элемент

Foo::Foo() {
    MAXIMUM = 100;
}

MAXIMUM уже создан, и вы пытаетесь изменить его значение, что недопустимо для const переменных.

В приведенном ниже утверждении

const int Foo::MAXIMUM = 100;

MAXIMUM не является статической переменной, поэтому она будет связана с объектом.Вы не можете получить доступ к MAXIMUM, используя имя класса.

0 голосов
/ 06 октября 2018
Переменные

" Const " и " Reference " необходимо инициализировать перед созданием объекта класса.В вашем случае,

Foo::Foo() {            // **End of this line, object is getting created.**
    MAXIMUM = 100;      // *This line, gets Error: "expression must be a modifiable lvalue"*
    }

, чтобы избежать этого, вы должны использовать «Список инициализации», где значение присваивается переменной до того, как конструктор класса создаст объект.

Fix :

     Foo::Foo():MAXIMUM(100) {    // const variable is initialized 
         MAXIMUM = 200;    
     } 
0 голосов
/ 06 октября 2018

Вы хотите список инициализаторов :

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