在地图中搜索值时,不匹配'operator ='

SJJ*_*SJJ 0 c++ maps iterator compiler-errors 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; 
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激!

Nat*_*ica 6

您的会员功能已标记const.这意味着您在函数中访问的所有成员也是const合格的.这意味着当你调用find它时返回一个const_iterator而不是一个iterator.您可以使用它来修复它

map<string, float>::const_iterator p;
Run Code Online (Sandbox Code Playgroud)

甚至更容易

auto p = marks.find(module);
Run Code Online (Sandbox Code Playgroud)

至于抛出异常的错误,你应该创建一个抛出的对象.这意味着你需要扔throw NoMarkException();throw (NoMarkException);