为什么我不能放置/插入到我的地图中?
Why can't I emplace/insert into my map?
此代码片段在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
相同。我试过制作string
和const
,但没有效果。为什么会发生这种情况?我的代码出了什么问题?
该方法被标记为const,因此不能在其作用域内修改成员变量。
更改
bool parseMeta() const
至
bool parseMeta()
并且它应该编译。
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 如何打印我在地图中使用的数组?
- 为什么当我尝试在地图中迭代时我的值不显示
- 为什么我的地图迭代器中存在语法错误
- 我的使用地图的程序在第一次输入后崩溃
- 重载 map::key_comp,以便我可以在对象指针的地图上使用 map::find
- 使用单词键将多个行号的向量添加到我的地图中
- 如果我的密钥是我价值的一部分,我应该使用地图还是集合
- C++:为什么我的hash_map会给我一个像地图一样有序的结果
- 为什么我的地图分配会导致编译器错误
- 如何制作我的"own"模板化地图?
- 我在地图中有9个元素,但begin()和end()之间的距离只有2
- 为什么我不能放置/插入到我的地图中?
- 我的程序显示空的表面,它需要在那里显示地图
- 为什么我的Allegro 5地图编辑器有问题
- 绘制瓷砖地图正在将我的 fps 降低到爬行