我已经定义了新类型:
typedef int(* func) (const std::vector<cv::Mat>&, cv::Mat&);
然后我做了 class 成员:
std::map< std::string, std::pair<int,func> > functions;
在功能上,在第一行:
pair<funcId,func> functionSet::getRandomFunction() const
{
map<string, pair<int,func>>::iterator it = functions.begin();
std::advance(it, functions.size());
string name = it->first;
func function = it->second.second;
int argumentsNumber = it->second.first;
funcId id = make_pair(argumentsNumber,name);
pair<funcId,func> p = make_pair(id,function);
return p;
}
我收到了这个错误:
错误:从'std :: map,std :: pair&,cv :: Mat&)>> :: const_iterator {aka std :: _ Rb_tree_const_iterator,std :: pair&,cv :: Mat&)>>>}转换为非-scalar类型'std :: map,std :: pair&,cv :: Mat&)>> :: iterator {aka std :: _ Rb_tree_iterator,std :: pair&,cv :: Mat&)>>>}''request map>: :iterator it = functions.begin();
2 回答
您的方法标记为const,因此
this
的类型为const functionSet*
. 改变你的第一行:或者如果您的编译器支持C 11标准:
再看一下输出:
所以似乎
functions
是一个const映射,它的begin()
返回一个const迭代器,它不能转换成普通的迭代器 .它是常量的原因是因为
getRandomFunction
是一个常量成员函数,因此它可以将类成员视为常量 .由于您不修改 Map ,只需使用
const_iterator
即可解决问题: