gra*_*eds 2 c++ visual-studio-2015
此代码片段在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_;
};
Run Code Online (Sandbox Code Playgroud)
给出了这个可爱的错误:
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
Run Code Online (Sandbox Code Playgroud)
至
bool parseMeta()
Run Code Online (Sandbox Code Playgroud)
它应该编译.