[英]C++ "error: passing 'const std::map<int, std::basic_string<char> >' as 'this' argument of ..."
[英]conversion from std::map<std::basic_string<char>,std::pair<int,int(*)(const std::vector::Mat
我定义了新类型:
typedef int(* func) (const std::vector<cv::Mat>&, cv::Mat&);
然后我做了班级成员:
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&)>>>}'转换为非-标量类型'std :: map,std :: pair&,cv :: Mat&)>> :: iterator {aka std :: _ Rb_tree_iterator,std :: pair&,cv :: Mat&)> >>}'请求的map> ::迭代器= function.begin();
您的方法标记为const,因此this
类型为const functionSet*
。 更改您的第一行:
map<string, pair<int,func>>::const_iterator it = functions.begin();
或者您的编译器支持C ++ 11标准:
auto it = functions.cbegin();
再次查看输出:
conversion from
'std::map, std::pair&, cv::Mat&)> >::const_iterator {...}'
to non-scalar type
'std::map, std::pair&, cv::Mat&)> >::iterator {...}'
因此,似乎functions
是一个const映射,其begin()
返回一个const迭代器,并且无法将其转换为普通的迭代器。
之所以为常量,是因为getRandomFunction
是常量成员函数,因此可以将类成员视为常量。
由于您不修改地图,因此只需使用const_iterator
即可解决此问题:
map<string, pair<int,func>>::const_iterator it = functions.begin();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.