为什么我不能放置/插入到我的地图中?

Why can't I emplace/insert into my map?

本文关键字:我的 地图 插入 不能 为什么      更新时间:2023-10-16

此代码片段在VS 2015中失败(我没有任何其他编译器可以测试它):

class loader
{
bool parseMeta() const
{
    for (auto it = meta_.begin(); it != meta_.end(); ++it)
    {
        std::string line(*it);
        size_t n = line.find_first_of("=", 2);
        if (n == std::string::npos) { return false; }
        std::string key = line.substr(2, n);
        std::string value = line.substr(n + 1);
        kvp_.emplace(std::make_pair(key, value)); // <-- HERE
    }
    return true;
}
private:
    std::vector<std::string> meta_;
    std::map<std::string, std::string> kvp_;
};

给出了一个可爱的错误:error C2662: 'std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const _Kty,_Ty>>>>,bool> std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,false>>::emplace<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>> &&)': cannot convert 'this' pointer from 'const std::map<std::string,std::string,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>' to 'std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,false>> &

然而,如果我将kvp_移动到标记的故障线(由<-- HERE表示)上方的线,则错误消失。

insert相同。我试过制作stringconst,但没有效果。为什么会发生这种情况?我的代码出了什么问题?

该方法被标记为const,因此不能在其作用域内修改成员变量。

更改

bool parseMeta() const

bool parseMeta()

并且它应该编译。