2017-01-05 2 views
0

Я C++ noob, и я не могу понять это. Я пытаюсь найти значение на карте с использованием параметра модуля в качестве ключа, как показано ниже. Первая ошибка, которую я получаю, является несоответствием для оператора равно в строке, указанной ниже, а вторая ошибка - это «ожидаемое первичное выражение перед») «токен» в строке, показанной ниже.нет соответствия для 'operator =' при поиске значения на карте

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; 
} 

Любая помощь будет очень признательна!

ответ

6

Ваша функция участника отмечена const. Это означает, что все члены, к которым вы обращаетесь в функции, также являются const квалифицированными. Это означает, что когда вы вызываете find, он возвращает const_iterator вместо iterator. Вы можете исправить это с помощью

map<string, float>::const_iterator p; 

Или еще проще с

auto p = marks.find(module); 

Что касается вашей ошибки с метанием исключения вы должны создать объект, чтобы бросить. Это означает, что вам нужно бросить throw NoMarkException(); не throw (NoMarkException);

Смежные вопросы