Вам необходимо использовать список инициализаторов.
Test::Test() : theVar(1, 2) {}
Если проблема в том, что i
является результатом вызова некоторой другой функции, вы можете сделать что-то вроде
Test::Test() : theVar(1, compute_i()) {}
Проблема заключается в том, что тело конструктора выполняется после . Все члены инициализируются.
Они инициализируются первыми путем вызова тех конструкторов, которые указаны в списке инициализаторов, и если член не указан там, вызывая его конструктор по умолчанию.
Вот почему вы получаете сообщение об ошибке Beer::Beer()
, так как ничего не указано, он пытается вызвать этот конструктор для инициализации theVar
, и его не существует..
Затем после все члены инициализируются, выполняется тело конструктора (где вы выполняете присваивание , а не инициализацию theVar
. Нокомпилятор никогда не заходит так далеко, потому что не может выполнить инициализацию.