我知道这是由const类型self.at(idx)
引起的,但不知道如何在这种静态方法中修复它。
template<class Key, class Val>
struct map_item
{
typedef std::map<Key,Val> Map;
static Val& get(Map const& self, const Key idx) { return self.at(idx); }
} // is it legal to be static? but I need 'static'
错误:
error: invalid initialization of reference of type ‘std::basic_string<char>&’ from expression of type ‘const mapped_type {aka const std::basic_string<char>}’
static Val& get(Map const& self, const Key idx) { return self.at(idx); }
答案 0 :(得分:1)
只需修复返回类型:
static const Val& get(Map const& self, const Key idx) { return self.at(idx); }
// ^^^^^
您发布的错误消息中都有解释(重点强调):
错误:从类型为'const mapped_type {aka
的表达式初始化‘std::basic_string<char>&’
}'const std::basic_string<char>
类型的引用无效
at()
会返回const Val&
,但您尝试返回Val&
并且没有此隐式转换。您只需更改get()
的返回类型以匹配at()
的返回类型。