从C++11
以后,语言的新特性增加得越来越多,在实际使用过程中这些特性容易将错误提前在编译器暴露出来,记录一下C++
程序编译过程中,出现的那些错误:
【错误1】无法从"const _Ty2"转换为"value_type&"
使用了const_iterator,并且需要修改值;将迭代器const_iterator
修改为iterator
即可;
【错误2】 std::pair<key_type, value_type> std::make_pair<key_type, value_type>(_Ty && _Ty2 &&) noexcept(expr)
:无法将参数1从“const key_type”转换为“_Ty1 &&”
std::make_pair<key_type, value_type>(key, value_type()); // 错误
std::pair<key_type, value_type>(key, value_type()); // 正确
【错误3】二进制类型“[”:没有找到接受“const std::unordered_map<>”类型左操作数的运算符(或没有可接受的转换);
void filtered(const int &key) const noexcept // const表明该函数不能对类的成员变量进行修改
{
//hash_map[key]; 错误
hash_map.at(key);
}
【错误4】 二进制“<”:“const_Ty”不定义该运算符或到预定义运算符可接收的类型转换
std::set<list_iterator> filter(const int &key) const noexcept
{
std::set<list_iterator> res;
......
res.insert(hash_map[key]); // 错误,没有重载list_iterator的operator < 运算符,编译报错
}