【问题标题】:Class Instantiated from here error c++从这里实例化的类错误 c++
【发布时间】:2013-07-14 23:13:22
【问题描述】:

我正在尝试创建一个从串行端口读取和解析数据的类,但是我不断收到实例化错误,我不知道为什么。该类接受一个串行端口及其 io_service。我正在使用提升。我遇到了很多错误,但我认为这是因为它是累积的(我认为,我不确定这是否正确)。这是第一个:

在 /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&, const boost::system::error_code&, unsigned int), boost::_bi::list4, boost ::reference_wrapper >, boost::arg, boost::arg > >'

这是该类的代码:

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";
    }
}

};

【问题讨论】:

  • 这是一系列错误。第一个是:在/usr/include/boost/bind.hpp:22:0 包含的文件中,来自../Sources/Magnetic Compensator Core.cpp:17:/usr/include/boost/bind/bind.hpp : 在 'boost::_bi::result_traits<:_bi::unspecified void boost::asio::basic_deadline_timer>&, const boost::system::error_code&, unsigned int)>': /usr/include/boost/bind/bind_template.hpp:15:48: 从 'boost::_bi::bind_t<:_bi::unspecified>
  • boost::asio::basic_deadline_timer<:posix_time::ptime>&, const boost::system::error_code&, unsigned int), boost::_bi::list4<: reference_wrapper>, boost::reference_wrapper<:asio::basic_deadline_timer> >, boost::arg, boost::arg >>'
  • 把它们放在问题中
  • 他们现在已被放入问题中
  • 请修正您的格式,以便代码合理

标签: c++ class boost serial-port boost-asio


【解决方案1】:

这不会编译

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()));

成员函数mag_serial::read_callback 需要一个实例来绑定。

ser_port.async_read_some(
    boost::asio::buffer(my_buffer),
    boost::bind(
        &mag_serial::read_callback,
        this,
        boost::ref(data_available),
        boost::ref(timeout),
        boost::asio::placeholders::error,
        boost::asio::placeholders::bytes_transferred
    )
);

这是coliru,我没有尝试修复格式。

【讨论】:

  • 谢谢。我不敢相信我忘记了最简单的事情
猜你喜欢
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2012-05-04
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多