Я хочу установить ссылку со значением, которое я рассчитываю в конструкторе.
Это возможно и как?
Class::Class(float data1, float data2, ..) : Superclass(calculatedValue)
{
float calculatedValue = complex calculated from data1, data2, ...
}
//error, because the compiler doesn't know the calculatedValue in the first line.
Спасибо за ваши решения!
Редактировать:
Если я использую ответ от @dasblinkenlight, я получаю это исключение:
Программа: C: \ WINDOWS \ SYSTEM32 \ MSVCP140D.dll Файл: c: \ Program Files
(x86) \ Microsoft Visual
studio \ 2017 \ community \ vc \ tools \ msvc \ 14.10.25017 \ include \ vector Line:
1754Выражение: нижний индекс вектора вне диапазона
Информацию о том, как ваша программа может вызвать ошибку подтверждения,
см. документацию по Visual C ++ для подтверждений.
поскольку Superclass
принимает float&
Вы должны выделить место для значения перед предоставлением ссылки на суперкласс. Затем вы должны установить значение результата вычисления перед вызовом Superclass
конструктор.
Вы можете сделать это, разместив код для вычисления calculatedValue
в частной статической функции-члене, и создание переменной экземпляра для float
:
private:
float val;
static float calculateValue(float data1, float data2, ...) {
return complex calculated from data1, data2
}
public:
Class::Class(float data1, float data2, ...)
: Superclass(val = calculateValue(data1, data2, ...)) {
}
Сейчас Superclass
может установить свою ссылку на val
подкласса, который в свою очередь устанавливается на результат вызова calculateValue
функция-член по параметрам, передаваемым конструктору.
Других решений пока нет …