boost::_bi::解包器<F>::解包不能用作函数?
boost::_bi::unwrapper<F>::unwrap cannot be used as a function?
试图使用我在Windows和Linux中创建的线程类。选择Netbeans,在项目设置中,我将Linker > Additional Library Directories
指定为/usr/local/boost_1_53_0
在Libraries
下,我指定了boost_thread-mt
在C++ Compiler > Include Directories
下,我指定了/usr/local/boost_1_53_0
thread.h
和Thread.cpp
是我的文件。Thread.hpp
属于Boost。
显示的错误位于我包含#include <boost/thread/thread.hpp>
的行,错误为:
/usr/local/boost_1_53_0/boost/bind/bind.hpp: In member function ‘void
boost::_bi::list1<A1>::operator()(boost::_bi::type<void>, F&, A&, int)
[with F = unsigned int (**)(void*), A = boost::_bi::list0, A1 =
boost::_bi::value<void*>]’: In file included from
/usr/local/boost_1_53_0/boost/bind.hpp:22:0,
from /usr/local/boost_1_53_0/boost/thread/detail/thread.hpp:29,
from /usr/local/boost_1_53_0/boost/thread/thread.hpp:22,
from ../../../TSDK-master/src/Core/source/thread.h:72,
from ../../../TSDK-master/src/Core/source/Thread.cpp:95:
/usr/local/boost_1_53_0/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, F = unsigned
int (**)(void*), L = boost::_bi::list1<boost::_bi::value<void*> >,
boost::_bi::bind_t<R, F, L>::result_type = void]’
/usr/local/boost_1_53_0/boost/thread/detail/thread.hpp:117:17:
instantiated from ‘void boost::detail::thread_data<F>::run() [with F =
boost::_bi::bind_t<void, unsigned int (**)(void*),
boost::_bi::list1<boost::_bi::value<void*> > >]’
../../../TSDK-master/src/Core/source/Thread.cpp:202:50: instantiated
from here /usr/local/boost_1_53_0/boost/bind/bind.hpp:253:9: error:
‘boost::_bi::unwrapper<F>::unwrap [with F = unsigned int
(**)(void*)]((* & f), 0l)’ cannot be used as a function
我完全不知道是什么导致了这种情况。有人能帮忙吗?
编辑:
线程.h 的一部分
#include <boost/thread/thread.hpp>
#include <cstdio>
class Thread
{
protected:
boost::thread* m_Thread;
unsigned int id;
private:
bool m_pause;
boost::mutex m_pause_mutex;
boost::condition_variable m_pause_changed;
bool threadCreated;
public:
Thread();
Thread(unsigned int id);
~Thread();
bool Start();
bool CreateThread(unsigned int Function(void* pParam),void *pParam);
void Terminate();
unsigned int myThreadProc(void* param);
bool IsRunning();
bool IsStarted();
protected:
virtual unsigned int ThreadProc() = 0;
};
和thread.cpp 的一部分
#include "thread.h"
Thread::Thread() : m_Thread(NULL), m_pause(true), threadCreated(false), id(NULL)
{
}//Thread ctor
Thread::Thread(unsigned int _id) : m_Thread(NULL), id(_id), threadCreated(false), m_pause(true)
{}
Thread::~Thread()
{
if (NULL != m_Thread) { delete m_Thread; }
}
unsigned int Thread::GetThreadID() { return id; }//GetThreadID
bool Thread::Start()
{
m_Thread = new boost::thread(&Thread::myThreadProc, this, this);
threadCreated = true;
return threadCreated;
}
bool Thread::CreateThread(unsigned int Function(void* pFunctionParam),void *pParam)
{
//Receives Thread Function,pParam as Arguments and starts Thread.
m_Thread= new boost::thread(&Function,pParam);
threadCreated = true;
return threadCreated;
}
void Thread::Terminate()
{
if (NULL != m_Thread) {
m_Thread->join();
m_Thread=0;
}
else {printf("No thread was createdn");}
}
unsigned int Thread::myThreadProc(void* param)
{
Thread* ourBoostThread = (Thread*) param;
int ret = ourBoostThread->ThreadProc();
return ret;
}//_ThreadProc
bool Thread::IsRunning() { return !m_pause; }
bool Thread::IsStarted() { return threadCreated; }
第202行为bool Thread::IsStarted() { return threadCreated; }
m_Thread= new boost::thread(&Function,pParam);
Function
实际上是一个指向函数的指针,尽管它看起来不像。如果你声明了一个函数类型的函数参数,那么它实际上就是一个函数指针;正如声明为数组的函数参数实际上是指针一样。
所以&Function
是指向函数指针的指针,它不能像函数一样被调用。将其更改为仅Function
,可以是.
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么虚函数不能是静态的和全局的?
- 是否可以将函数导入命名空间,但不能导出它?
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- 为什么我不能在 constexpr lambda 函数中使用 std::tuple
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 为什么我不能将引用作为 std::async 的函数参数传递
- 不能调用构造函数
- 为什么我不能引用指向实例化对象的函数的指针?
- 不能对类型化模板使用 STL 函数
- 为什么函数名不能与返回名类型相同?
- 不能制作需要布尔成员函数的C++20概念
- 为什么我不能直接从返回指针的函数返回对指针的引用?
- 为什么继承的受保护构造函数不能公开?
- 为什么我不能创建一个 TSubclassOf<> 在 SpawnActor() 函数中使用?
- Clang-Format 不能正确分配函数参数