我正嘗試創建一個在專用線程中運行的函數,其中 從串口讀取。但我無法將連接 傳遞給線程。我在我的代碼減少到下面的例子:由於移動構造函數而被刪除的對象
#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