C++ C++;增强功能问题

C++ C++;增强功能问题,c++,boost,C++,Boost,我做了一些事情来破坏我程序中的功能,但我不知道是什么。我在类头文件中定义了typedef: typedef boost::function<void(instr_ptr, std::vector<ResultBase*>) > GenFunction; 我将其设定如下: void DataFlowSolver::SetGenFunction(GenFunction &func) { Gen = func; } void DataFlowSolver::

我做了一些事情来破坏我程序中的功能,但我不知道是什么。我在类头文件中定义了typedef:

typedef boost::function<void(instr_ptr, std::vector<ResultBase*>) > GenFunction;
我将其设定如下:

void DataFlowSolver::SetGenFunction(GenFunction &func)
{
    Gen = func;
}

void DataFlowSolver::SetKillFunction(GenFunction &func)
{
    Kill = func;
}
blockSolver.SetGenFunction(GenLiveVar);
我在一个单独的头文件中有另一个函数:

void GenLiveVar(const instr_ptr instr, std::vector<ResultBase*> &list);
但是,编译器抱怨:

CFG.cc:617:错误:没有用于调用的匹配函数 'DataFlowSolver::SetGenFunction(无效(&)(仪表), std::vector>&))' DataFlowSolver.h:21:注:候选项为:void DataFlowSolver::SetGenFunction(GenFunction&)

但它让我做到了这一点:

GenFunction fun = GenLiveVar;
blockSolver.SetGenFunction(fun);

有人知道可能出了什么问题吗?我知道这以前是有效的,但我不确定我是如何打破它的…

您正在通过非常量引用将
boost::function
传递到
Set*function
。这将防止临时变量用作参数,并且从普通函数到
boost::function
的转换将创建一个临时值。您需要为参数类型使用const引用,代码才能正常工作

GenFunction fun = GenLiveVar;
blockSolver.SetGenFunction(fun);