不匹配'运营商='在地图中搜索值时

时间:2017-01-05 18:49:41

标签: c++ compiler-errors iterator maps operators

我是一个c ++菜鸟,我无法解决这个问题。我尝试使用模块参数作为关键字在地图中搜索值,如下所示。我得到的第一个错误是对于下面指示的行上的运算符等于不匹配,并且第二个错误是"在'之前的预期的主要表达式。令牌"在下面显示的行上。

float Student::getMark(const string &module) const throw (NoMarkException){ //TODO
    map<string, float>::iterator p;
    p = marks.find(module); //no match for operator=
    if(p != marks.end())
        return p->second;
    else
        throw (NoMarkException); //expected primary-expression before ')' token
    return 0.0; 
}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:6)

您的会员功能已标记为const。这意味着您在函数中访问的所有成员也都是const限定的。这意味着当您致电find时,它会返回const_iterator而不是iterator。您可以使用

修复它
map<string, float>::const_iterator p;

或者更容易

auto p = marks.find(module);

对于抛出异常的错误,您应该创建一个要抛出的对象。这意味着你需要抛出throw NoMarkException();而不是throw (NoMarkException);