我是一个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;
}
任何帮助将不胜感激!
答案 0 :(得分:6)
您的会员功能已标记为const
。这意味着您在函数中访问的所有成员也都是const
限定的。这意味着当您致电find
时,它会返回const_iterator
而不是iterator
。您可以使用
map<string, float>::const_iterator p;
或者更容易
auto p = marks.find(module);
对于抛出异常的错误,您应该创建一个要抛出的对象。这意味着你需要抛出throw NoMarkException();
而不是throw (NoMarkException);