我想創建一個類,將讀取和解析從串行端口的數據,但我不斷收到一個實例化的錯誤,我不知道爲什麼。這個類需要一個串口和它的io_service。我正在使用boost。我遇到了很多錯誤,但我認爲它是因爲它的累積性(我認爲,我不確定這是否正確)。這裏是第一個:類從這裏實例化錯誤C++
在文件中包含從/usr/include/boost/bind.hpp:22:0, 從../Sources/Magnetic補償Core.cpp:17:
/usr/include/boost/bind/bind.hpp:在實例化'boost :: _ bi :: result_traits &,const boost :: system :: error_code &,unsigned int)>': /usr/include/boost/bind/bind_template.hpp:15:48:從'boost :: _ bi :: bind_t &,const boost :: system :: error_code &,unsigned int),boost :: _ bi :: list4,boost :: reference_wrapper>實例化, boost :: arg < 1>,噓聲噸:: ARG < 2>>>」
下面是類的代碼:
class mag_serial
{
bool data_available;
boost::asio::serial_port& ser_port;
boost::asio::deadline_timer timeout;
char my_buffer[1];
std::string str;
std::string st;
void read_callback(bool& data_available, boost::asio::deadline_timer& timeout, const boost::system::error_code& error, std::size_t bytes_transferred)
{
data_available = true;
if(str.length() > 1)
{
if (!(str.at(str.length() - 1) == temp))//&str.at(str.length() - 1) != "#")
{
str.append(my_buffer,bytes_transferred);
if(str.at(str.length() - 1) == quit)
{
cout << "I am quitting";
Stop();
ser_port.cancel();
ser_port.close();
return;
}
i++;
}
else if (str.at(str.length() - 1) == temp)
{
st = str;//.substr(1, str.size());
// Processing Functions
}
}
else
{
str.append(my_buffer,bytes_transferred);
if(str.at(0) == quit)
{
cout << "I am quitting";
Stop();
ser_port.cancel();
ser_port.close();
return;
}
}
ser_port.async_read_some(boost::asio::buffer(my_buffer),
boost::bind(&mag_serial::read_callback, boost::ref(data_available),
boost::ref(timeout),boost::asio::placeholders::error(),
boost::asio::placeholders::bytes_transferred()));
data_available = true;
}
void wait_callback(boost::asio::serial_port& ser_port, const boost::system::error_code& error)
{
if (error)
{
// Data was read and this timeout was cancelled
return;
}
}
public:
mag_serial(boost::asio::serial_port& ser_port, boost::asio::io_service& io_svc): ser_port(ser_port), timeout(ser_port.get_io_service()){}
void read_mag_serial_thread()
{
bool data_available = false;
ser_port.async_read_some(boost::asio::buffer(my_buffer),
boost::bind(&mag_serial::read_callback, boost::ref(data_available),
boost::ref(timeout),boost::asio::placeholders::error(),
boost::asio::placeholders::bytes_transferred()));
timeout.expires_from_now(boost::posix_time::seconds(1));
timeout.async_wait(boost::bind(&mag_serial::wait_callback, boost::ref(ser_port),boost::asio::placeholders::error()));
io_svc.run();
if(!data_available)
{
ser_port.close();
cout << "ser_port was closed";
}
}
};
什麼是錯誤? – Borgleader
它的一系列錯誤。第一個是:在/usr/include/boost/bind.hpp:22:0, 包含的文件中:../Sources/Magnetic Compensator Core.cpp:17: /usr/include/boost/bind/bind .hpp:在實例化'boost :: _ bi :: result_traits& ,const boost :: system :: error_code&,unsigned int)>': /usr/include/boost/bind/bind_template.hpp:15:48:從'boost :: _ bi :: bind_t
user2554193
boost :: asio :: basic_deadline_timer&,const boost :: system :: error_code&,unsigned int),boost :: _ bi :: list4 < boost :: reference_wrapper ,boost :: reference_wrapper >,boost :: arg <1>,boost :: arg <2>> >' –
user2554193