I have a Request_manager
class with nested classes in it:
class Request_manager {
public:
class Ticket {
protected:
explicit Ticket(System_time start_time);
virtual void start() = 0;
}
struct ticket_element_{
int app;
std::shared_ptr <Ticket> ticket;
};
class Tickets_Queue{
private:
std::queue <ticket_element_> m_queue;
public:
void push(ticket_element_ ticket);
};
};
Request_manager::Ticket
is a parent class from other classes such as Ticket
, which have their own implementation of start()
:
class Ticket : public Request_manager::Ticket,
public std::enable_shared_from_this<Ticket> {
void start();
};
ticket_element_
may save the different children coming from Request_manager::Ticket
. In the implementation of Request_manager::Tickets_Queue::push
I do:
void Request_manager::Tickets_Queue::push(ticket_element_ ticket_container){
run_async(ticket_container.app, async::Policy::FIFO,
[ticket_container]() { ticket_container.ticket->start(); });
}
I get the error:
In file included from data_interfaces/Request_manager.cpp:1:0:
data_interfaces/Request_manager.h: In lambda function:
data_interfaces/Request_manager.h:31:22: error: ‘virtual void dataserver::Request_manager::Ticket::start()’ is protected
virtual void start() = 0;
^
data_interfaces/Request_manager.cpp:66:67: error: within this context
[ticket_container]() { ticket_container.ticket->start(); });
Which I do not understand as I should be able to access the protected method once I have the object