我正尝试创建一个在专用线程中运行的函数,其中 从串口读取。但我无法将连接 传递给线程。我在我的代码减少到下面的例子:由于移动构造函数而被删除的对象
#include <thread>
#include <boost/asio.hpp>
template <typename Port>
void serial_read(Port& port) {}
int main()
{
boost::asio::io_service serial_io;
boost::asio::serial_port port(serial_io);
port.open("/dev/ttyUSB0");
std::thread s(serial_read<boost::asio::serial_port>, port);
return 0;
}
但是,我得到了以下错误消息:
/usr/include/c++/4.7/tuple:128:25: error: use of deleted function ‘boost::asio::basic_serial_port<>::basic_serial_port(const boost::asio::basic_serial_port<>&)’
In file included from /usr/include/boost/asio.hpp:25:0,
from main.cpp:2:
/usr/include/boost/asio/basic_serial_port.hpp:47:7: note: ‘boost::asio::basic_serial_port<>::basic_serial_port(const boost::asio::basic_serial_port<>&)’ is implicitly declared as deleted because ‘boost::asio::basic_serial_port<>’ declares a move constructor or move assignment operator
错误消息是很清楚。我试图使用一个对象 ,该对象由于移动构造函数声明 而被删除,因此该对象不存在。但我仍然不明白 这里发生了什么,以及如何正确地做到这一点。有人可以给我 吗?
错误消息不会说出你认为它的意思。这是说复制构造函数已被标记为_deleted_,即没有复制构造函数。该对象本身被_not_删除。 – 2013-03-27 14:55:15