当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能插入/插入我的地图?

如何解决《为什么我不能插入/插入我的地图?》经验,为你挑选了1个好方法。

此代码片段在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 meta_;

    std::map kvp_;
};

给出了这个可爱的错误: error C2662: 'std::pair>>>,bool> std::_Tree>::emplace,std::allocator>,std::basic_string,std::allocator>>>(std::pair,std::allocator>,std::basic_string,std::allocator>> &&)': cannot convert 'this' pointer from 'const std::map,std::allocator>>' to 'std::_Tree> &

但是,如果我移动kvp_到标记的故障线上方的线(表示为<-- HERE),则错误消失.

与...相同insert.我试着做了string小号const,但尚未生效.为什么会这样?我的代码出了什么问题?



1> MarkusParker..:

该方法标记为const,因此您无法在其范围内修改成员变量.

更改

bool parseMeta() const

bool parseMeta()

它应该编译.


从理论上讲,错误消息中的`const`应该清楚地说明了这一点.现在,如果我们只能弄清楚哪些"常量"是明确的那个.;)
推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有