Вы возвращаете элемент по значению, которое составляет копию элемента ComplexClass
.Таким образом, вы не работаете с реальным членом, когда вызываете последующие методы (и то, что говорит вам компилятор).
Я думаю, что более идиоматический подход C ++, который помогает поддерживать инкапсуляцию и уменьшает связь, заключается в созданиичлен алгоритма:
A::doStuff()
{
member1.getSomething();
member1.getSomethignElse();
}
Таким образом, любой, кто использует class A
, не заботится , что реализация использует ComplexClass
, но вместо этого просто знает, что он может сказать A
сделайте некоторую работу, и это будет сделано наилучшим образом.
РЕДАКТИРОВАТЬ для комментария: В этом случае я бы предложил создать в A
методы, которые получают значения из ComplexClass
(снова, чтобы скрыть ваширеализация).Если это не подходит, вы можете вернуть реализацию по константной ссылке: const ComplexClass& getMember1() const { return member1; }