Я не могу понять, что не так с кодом здесь, поэтому я надеялся, что кто-то может мне помочь:
В заголовочном файле я определяю следующие функции
void GenLiveVar(const instr_ptr instr, std::vector<ResultBase*> &list);
void KillLiveVar(const instr_ptr instr, std::vector<ResultBase*> &list);
В файле заголовка класса я определяю этот typedef:
typedef boost::function<void(instr_ptr, std::vector<ResultBase*>) > GenFunction;
внутри класса, у меня есть два экземпляра GenFunction
GenFunction Gen;
GenFunction Kill;
И я назначаю их следующим образом
void DataFlowSolver::SetGenFunction(GenFunction &func)
{
Gen = func;
}
void DataFlowSolver::SetKillFunction(GenFunction &func)
{
Kill = func;
}
позже в моей программе я назначаю gen следующим образом:
blockSolver.SetGenFunction(GenLiveVar);
где GenLiveVar - функция, упомянутая ранее, а blockSolver - экземпляр класса, содержащего Gen / Kill.Внутри blockSolver я делаю следующее:
std::vector<ResultBase*> genList;
Gen(currentBlock->GetInstrPtr(i), &genList);
, а GetInstrPtr определяется как const instr_ptr GetInstrPtr(int index);
. Он генерирует следующую ошибку (извините за длину)
no match for call to '(GenFunction) (const instr_ptr, std::vector<ResultBase*, std::allocator<ResultBase*> >*)'
/nfs/ug/homes-2/r/rileyjon/ece540/Final/boost/function/function_template.hpp:1007:
note: candidates are: typename boost::function2<R, T1, T2>::result_type boost::function2<R, T1, T2>::operator()(T0, T1) const [with R = void, T0 = boost::shared_ptr<Instruction>,
T1 = std::vector<ResultBase*, std::allocator<ResultBase*> >
]
Я действительно не понимаю, почему это проблема: типы, безусловно, одинаковы.Некоторая помощь будет оценена.Спасибо