That's how private members work. They can only be accessed by member functions of the class itself. In your case, Text::set() is a member function of class Text, so it can access the private member text. On the other hand, Menu::push_back is a member of class Menu, so it has no access to the private members of Text.
Menu::push_back(const Text&) probably should not have access to the private members of class Text. It suspect that it should copy the Text object into a collection of menu items.