Обычно, когда у вас есть постоянная переменная частного члена в вашем классе, у которой есть только получатель, но нет настройки, он выглядит примерно так:
// Example.h
class Example {
public:
Example(const int value);
const int getValue() const;
private:
const int m_value;
};
// Example.cpp
#include "Example.h"
Example::Example(const int value)
: m_value(value)
{
}
const int Example::getValue() const
{
return m_value;
}
Теперь то, что я пытаюсь сделать, имеет постоянную переменную типа int как это, но вместо того, чтобы определять ее в секции инициализации следующим образом: : m_value(value)
Мне нужно взять другой объект - я буду использовать вектор в этом примере - в качестве параметра конструктора и задайте значение m_value на основе объекта параметра. В этом случае я попытаюсь сделать векторный размер + 1, если размер выше 0. Так вот что я сделал:
Example::Example(std::vector<Example*> myVec)
{
if (myVec.size()) {
m_value = myVec.size() + 1;
}
else {
m_value = -1;
}
}
Но я получаю сообщение об ошибке uninitialized member 'Example::m_value' with 'const' type 'const int'
, и если я инициалирую m_value внутри раздела инициализации, я получаю сообщение об ошибке assignment of read-only data-member 'Example::m_value'
, которое имеет смысл для меня, я должен получить эти ошибки, но как я могу пойти их?
Изменить: Только способ, которым я мог редактировать m_value
, находится внутри самого объекта (поскольку m_value является закрытым). Наличие только getter ограничило бы меня установкой m_value на что-либо другое, кроме того, что было установлено в конструкторе. Могу ли я извлечь выгоду из чего-либо из константы int как переменной-члена?