“'boost :: bind'是模棱两可的”C ++错误

时间:2016-05-29 10:21:57

标签: c++ eclipse boost arduino boost-bind

我试图从一个c ++程序控制一个arduino,经过一些研究我发现this,但问题是,它不能在eclipse上编译。

它在 3_async> AsyncSerial.cpp

中的 102 行给出了2个错误
boost::thread t(boost::bind(&asio::io_service::run, &pimpl->io));

Screenshot

如果使用自己的CMakeLists.txt进行编译,则不会出错。 如果有的话,有什么方法可以知道我在eclipse上缺少什么设置?

编辑: 建议我发布日志:

12:32:18 **** Incremental Build of configuration Debug for project Arduino_SerialTest ****
make all 
Building file: ../src/lib/pica_protocol/Receiver.cpp
Invoking: Cross G++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/lib/pica_protocol/Receiver.d" -MT"src/lib/pica_protocol/Receiver.o" -o "src/lib/pica_protocol/Receiver.o" "../src/lib/pica_protocol/Receiver.cpp"
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from ../src/lib/pica_protocol/../serial/AsyncSerial.h:14,
                 from ../src/lib/pica_protocol/../serial/BufferedAsyncSerial.h:8,
                 from ../src/lib/pica_protocol/Receiver.h:12,
                 from ../src/lib/pica_protocol/Receiver.cpp:8:
/usr/include/boost/thread/detail/thread.hpp: In instantiation of ‘void boost::detail::thread_data<F>::run() [with F = void (pica_protocol::Receiver::*)()]’:
../src/lib/pica_protocol/Receiver.cpp:75:1:   required from here
/usr/include/boost/thread/detail/thread.hpp:117:17: error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘((boost::detail::thread_data<void (pica_protocol::Receiver::*)()>*)this)->boost::detail::thread_data<void (pica_protocol::Receiver::*)()>::f (...)’, e.g. ‘(... ->* ((boost::detail::thread_data<void (pica_protocol::Receiver::*)()>*)this)->boost::detail::thread_data<void (pica_protocol::Receiver::*)()>::f) (...)’
                 f();
                 ^
In file included from /usr/include/boost/bind.hpp:22:0,
                 from ../src/lib/pica_protocol/../serial/AsyncSerial.h:13,
                 from ../src/lib/pica_protocol/../serial/BufferedAsyncSerial.h:8,
                 from ../src/lib/pica_protocol/Receiver.h:12,
                 from ../src/lib/pica_protocol/Receiver.cpp:8:
/usr/include/boost/bind/bind.hpp: In instantiation of ‘void boost::_bi::list2<A1, A2>::operator()(boost::_bi::type<void>, F&, A&, int) [with F = boost::_mfi::mf1<void, pica_protocol::Receiver, std::basic_string<char> >; A = boost::_bi::list0; A1 = boost::_bi::value<pica_protocol::Receiver*>; A2 = boost::_bi::value<std::basic_string<char>*>]’:
/usr/include/boost/bind/bind_template.hpp:20:59:   required from ‘boost::_bi::bind_t<R, F, L>::result_type boost::_bi::bind_t<R, F, L>::operator()() [with R = void; F = boost::_mfi::mf1<void, pica_protocol::Receiver, std::basic_string<char> >; L = boost::_bi::list2<boost::_bi::value<pica_protocol::Receiver*>, boost::_bi::value<std::basic_string<char>*> >; boost::_bi::bind_t<R, F, L>::result_type = void]’
/usr/include/boost/thread/detail/thread.hpp:117:17:   required from ‘void boost::detail::thread_data<F>::run() [with F = boost::_bi::bind_t<void, boost::_mfi::mf1<void, pica_protocol::Receiver, std::basic_string<char> >, boost::_bi::list2<boost::_bi::value<pica_protocol::Receiver*>, boost::_bi::value<std::basic_string<char>*> > >]’
../src/lib/pica_protocol/Receiver.cpp:75:1:   required from here
/usr/include/boost/bind/bind.hpp:313:34: error: no match for call to ‘(boost::_mfi::mf1<void, pica_protocol::Receiver, std::basic_string<char> >) (pica_protocol::Receiver*&, std::basic_string<char>*&)’
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
                                  ^
In file included from /usr/include/boost/mem_fn.hpp:22:0,
                 from /usr/include/boost/bind/bind.hpp:26,
                 from /usr/include/boost/bind.hpp:22,
                 from ../src/lib/pica_protocol/../serial/AsyncSerial.h:13,
                 from ../src/lib/pica_protocol/../serial/BufferedAsyncSerial.h:8,
                 from ../src/lib/pica_protocol/Receiver.h:12,
                 from ../src/lib/pica_protocol/Receiver.cpp:8:
/usr/include/boost/bind/mem_fn_template.hpp:136:65: note: candidates are:
 template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1)
                                                                 ^
In file included from /usr/include/boost/bind/mem_fn.hpp:215:0,
                 from /usr/include/boost/mem_fn.hpp:22,
                 from /usr/include/boost/bind/bind.hpp:26,
                 from /usr/include/boost/bind.hpp:22,
                 from ../src/lib/pica_protocol/../serial/AsyncSerial.h:13,
                 from ../src/lib/pica_protocol/../serial/BufferedAsyncSerial.h:8,
                 from ../src/lib/pica_protocol/Receiver.h:12,
                 from ../src/lib/pica_protocol/Receiver.cpp:8:
/usr/include/boost/bind/mem_fn_template.hpp:163:7: note: R boost::_mfi::mf1<R, T, A1>::operator()(T*, A1) const [with R = void; T = pica_protocol::Receiver; A1 = std::basic_string<char>]
     R operator()(T * p, A1 a1) const
       ^
/usr/include/boost/bind/mem_fn_template.hpp:163:7: note:   no known conversion for argument 2 from ‘std::basic_string<char>*’ to ‘std::basic_string<char>’
/usr/include/boost/bind/mem_fn_template.hpp:168:25: note: template<class U> R boost::_mfi::mf1<R, T, A1>::operator()(U&, A1) const [with U = U; R = void; T = pica_protocol::Receiver; A1 = std::basic_string<char>]
     template<class U> R operator()(U & u, A1 a1) const
                         ^
/usr/include/boost/bind/mem_fn_template.hpp:168:25: note:   template argument deduction/substitution failed:
In file included from /usr/include/boost/bind.hpp:22:0,
                 from ../src/lib/pica_protocol/../serial/AsyncSerial.h:13,
                 from ../src/lib/pica_protocol/../serial/BufferedAsyncSerial.h:8,
                 from ../src/lib/pica_protocol/Receiver.h:12,
                 from ../src/lib/pica_protocol/Receiver.cpp:8:
/usr/include/boost/bind/bind.hpp:313:34: note:   cannot convert ‘(& a)->boost::_bi::list0::operator[]<std::basic_string<char>*>((* &((boost::_bi::list2<boost::_bi::value<pica_protocol::Receiver*>, boost::_bi::value<std::basic_string<char>*> >*)this)->boost::_bi::list2<boost::_bi::value<pica_protocol::Receiver*>, boost::_bi::value<std::basic_string<char>*> >::<anonymous>.boost::_bi::storage2<boost::_bi::value<pica_protocol::Receiver*>, boost::_bi::value<std::basic_string<char>*> >::a2_))’ (type ‘std::basic_string<char>*’) to type ‘std::basic_string<char>’
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
                                  ^
In file included from /usr/include/boost/bind/mem_fn.hpp:215:0,
                 from /usr/include/boost/mem_fn.hpp:22,
                 from /usr/include/boost/bind/bind.hpp:26,
                 from /usr/include/boost/bind.hpp:22,
                 from ../src/lib/pica_protocol/../serial/AsyncSerial.h:13,
                 from ../src/lib/pica_protocol/../serial/BufferedAsyncSerial.h:8,
                 from ../src/lib/pica_protocol/Receiver.h:12,
                 from ../src/lib/pica_protocol/Receiver.cpp:8:
/usr/include/boost/bind/mem_fn_template.hpp:176:25: note: template<class U> R boost::_mfi::mf1<R, T, A1>::operator()(const U&, A1) const [with U = U; R = void; T = pica_protocol::Receiver; A1 = std::basic_string<char>]
     template<class U> R operator()(U const & u, A1 a1) const
                         ^
/usr/include/boost/bind/mem_fn_template.hpp:176:25: note:   template argument deduction/substitution failed:
In file included from /usr/include/boost/bind.hpp:22:0,
                 from ../src/lib/pica_protocol/../serial/AsyncSerial.h:13,
                 from ../src/lib/pica_protocol/../serial/BufferedAsyncSerial.h:8,
                 from ../src/lib/pica_protocol/Receiver.h:12,
                 from ../src/lib/pica_protocol/Receiver.cpp:8:
/usr/include/boost/bind/bind.hpp:313:34: note:   cannot convert ‘(& a)->boost::_bi::list0::operator[]<std::basic_string<char>*>((* &((boost::_bi::list2<boost::_bi::value<pica_protocol::Receiver*>, boost::_bi::value<std::basic_string<char>*> >*)this)->boost::_bi::list2<boost::_bi::value<pica_protocol::Receiver*>, boost::_bi::value<std::basic_string<char>*> >::<anonymous>.boost::_bi::storage2<boost::_bi::value<pica_protocol::Receiver*>, boost::_bi::value<std::basic_string<char>*> >::a2_))’ (type ‘std::basic_string<char>*’) to type ‘std::basic_string<char>’
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
                                  ^
In file included from /usr/include/boost/bind/mem_fn.hpp:215:0,
                 from /usr/include/boost/mem_fn.hpp:22,
                 from /usr/include/boost/bind/bind.hpp:26,
                 from /usr/include/boost/bind.hpp:22,
                 from ../src/lib/pica_protocol/../serial/AsyncSerial.h:13,
                 from ../src/lib/pica_protocol/../serial/BufferedAsyncSerial.h:8,
                 from ../src/lib/pica_protocol/Receiver.h:12,
                 from ../src/lib/pica_protocol/Receiver.cpp:8:
/usr/include/boost/bind/mem_fn_template.hpp:184:7: note: R boost::_mfi::mf1<R, T, A1>::operator()(T&, A1) const [with R = void; T = pica_protocol::Receiver; A1 = std::basic_string<char>]
     R operator()(T & t, A1 a1) const
       ^
/usr/include/boost/bind/mem_fn_template.hpp:184:7: note:   no known conversion for argument 1 from ‘pica_protocol::Receiver*’ to ‘pica_protocol::Receiver&’
make: *** [src/lib/pica_protocol/Receiver.o] Errore 1

12:32:20 Build Finished (took 2s.670ms)

编辑2: 好吧,我通过像这样强制转换io_service :: run来修复歧义错误:

boost::thread t(boost::bind(static_cast<std::size_t(asio::io_service::*)(void)>(&asio::io_service::run), &pimpl->io));

但编译器错误仍然存​​在,希望有人知道如何修复...

0 个答案:

没有答案