包含提升库时出错
error while including boost libraries
所以这是我第一次在C++中进行多线程处理。现在我的代码抛出了一些我无法识别的错误,但这似乎表明当我包含boost/thread.hpp.时会发生这种错误
错误看起来像这样。
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 /usr/include/boost/thread/detail/thread.hpp:22,
from /usr/include/boost/thread/thread.hpp:22,
from /usr/include/boost/thread.hpp:13,
from processes/Video_process.h:8,
from processes/Video_process.cpp:7:
/usr/include/boost/bind/mem_fn.hpp: In member function ‘R& boost::_mfi::dm<R, T>::operator()(T*) const [with R = void*(void*), T = Video_process]’:
/usr/include/boost/bind/bind.hpp:243:60: instantiated from ‘R boost::_bi::list1<A1>::operator()(boost::_bi::type<R>, F&, A&, long int) [with R = void* (&)(void*), F = boost::_mfi::dm<void*(void*), Video_process>, A = boost::_bi::list0, A1 = boost::_bi::value<Video_process*>]’
/usr/include/boost/bind/bind_template.hpp:20:59: instantiated from ‘boost::_bi::bind_t<R, F, L>::result_type boost::_bi::bind_t<R, F, L>::operator()() [with R = void* (&)(void*), F = boost::_mfi::dm<void*(void*), Video_process>, L = boost::_bi::list1<boost::_bi::value<Video_process*> >, boost::_bi::bind_t<R, F, L>::result_type = void* (&)(void*)]’
/usr/include/boost/thread/detail/thread.hpp:61:17: instantiated from ‘void boost::detail::thread_data<F>::run() [with F = boost::_bi::bind_t<void* (&)(void*), boost::_mfi::dm<void*(void*), Video_process>, boost::_bi::list1<boost::_bi::value<Video_process*> > >]’
processes/Video_process.cpp:240:1: instantiated from here
/usr/include/boost/bind/mem_fn.hpp:342:23: error: invalid use of non-static member function
我的代码有点长,所以我不知道哪些比特(如果有的话)会有用,但这里有一些。。。
1.
boost::unique_lock<boost::mutex> lock(mx);
lock.lock();
(...) //stuff
is_data_ready = 1;
lock.unlock();
2.
stserver = boost::shared_ptr<boost::thread>
(new boost::thread(boost::bind(&Video_process::streamServer, this)));
以下是streamServer在标题中的声明方式
void* streamServer(void* arg);
boost::bind
中显示的错误基本上表明成员函数void* Video_process::streamServer(void* arg)
需要两个参数this
和void*
。您的代码只绑定第一个参数。
如果您想将其与boost::thread
一起使用,则不需要第二个void*
参数或将其绑定到常量。此外,boost::thread
会丢弃函子的返回值,因此您可能希望使用void
,即:
struct Video_process {
void streamServer();
};
boost::thread(boost::bind(&Video_process::streamServer, this));
// or simply
boost::thread(&Video_process::streamServer, this);
关于:
boost::unique_lock<boost::mutex> lock(mx);
lock.lock();
第一行锁定构造函数中的互斥对象,因此不需要第二行显式锁定。
相关文章:
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- 猫鼬 - 包含标准C++库文件时出错
- 编译包含LLVM API标头的C++文件时出错
- 在Windows上设置CMake和vcpkg时出错"无法打开包含文件"
- 包含可可标头时出错
- 如何包含QwebEngineView而不会出错
- 包含适当的标头时,实现文件中的多个定义出错
- 在 C++ 中包含库数据库.txt文件时出错
- ctime 包含 boost::文件系统时出错
- 当我包含 DirectXTex.h 时出错
- 编译包含 CPLEX 工具的项目时出错
- 在 Cygwin 64 上包含 boost.asio 时出错
- 使用 Qt 标头的递归包含时出错
- 将 Boost 标头包含在 .h 文件中但不包含在.cpp文件中时出错
- 当类包含boost::container::flat_set时,复制对象时出错
- 当我在 c++ 中不包含字符串头文件时出错
- 包含预编译头时出错
- 在c++项目中包含dlib库时出错
- 分配包含另一个结构数组的结构数组时出错