2016-03-23 7 views
0

Ich versuche eine boost::shared_ptr mit async_read_until zu verwenden und kann es nicht zum Funktionieren bringen. Das ist mein vereinfachten Code:basic_serial_port und async_read_until

header

boost::asio::io_service io_service; 
typedef boost::shared_ptr<boost::asio::serial_port> serial_port_ptr; 
serial_port_ptr serial_port; 
boost::asio::streambuf response_data; 
char delimiter = '\n'; 
boost::system::error_code error; 

verbinden

serial_port = serial_port_ptr(new boost::asio::serial_port(io_service)); 
serial_port->open("/dev/ttyS0", error); 

lesen
boost::asio::async_read_until(
    serial_port.get(), response_data, delimiter, 
    boost::bind(
    &serial_comm::data_received, 
     this, boost::asio::placeholders::error, 
     boost::asio::placeholders::bytes_transferred 
) 
); 

Der Fehler, den ich bekommen ist no type named 'type' in 'struct std::enable_if<false, void>'. Vielen Dank.

+1

Was passiert, wenn Sie '* serial_port' anstelle von' serial_port.get() 'versuchen? – Xirema

+0

@ Xirema, das hat funktioniert! brillant! Vielen Dank. – xinthose

Antwort

1

Sie haben einen Zeiger als Eingabe für boost::asio::async_read_until anstelle einer Referenz angegeben. Es sollte wie folgt umgeschrieben werden:

boost::asio::async_read_until(
    *serial_port, response_data, delimiter, 
    boost::bind(
    &serial_comm::data_received, 
     this, boost::asio::placeholders::error, 
     boost::asio::placeholders::bytes_transferred 
) 
);