У меня есть два класса, вложенные следующим образом:
class A{
private:
class B{
};
B *object;
}
теперь я хочу иметь функцию, которая может вернуть этот объект, например:
B& A::get_object(){
if(object == nullptr)
object = new B();
return *object;
}
но он говорит, что B не называет тип в get_object(). Что я сделал не так, как я могу его исправить?
Основная цель, которую я делаю, заключается в том, что я хочу скрыть класс B в том, что не позволяю создавать объект B любым другим способом, чем при вызове A :: get_object(). Может быть, я должен сделать это по-другому?
Заранее спасибо!
Попробуйте использовать возвращаемый тип метода как A::B&
.
Вы можете уйти без полного определения типа возвращаемого значения в декларации класса, но не в реализации - что может показаться вводящим в заблуждение.
Кроме того, по мере того, как вы возвращаете ссылку, вам нужно позаботиться о том, чтобы B* object
НИКОГДА недействителен - обычно, устанавливая его в конструкторе и удаляя его только в destuctor, иначе этот метод мог бы вернуть ссылку на null.
Если объект должен проживать до тех пор, пока он является родительским объектом, почему бы не поместить его в стек - либо это, либо метод возвращает B*
.
A::B&