С помощью следующего кода (Выдержки для краткости):C++ "ошибка: передача 'Const станд :: Карта <Int, станд :: basic_string <char>>' как 'этого' аргумент ..."
цвета. ч:
class color {
public:
color();
enum colorType {
black, blue, green, cyan, red,
magenta, brown, lightgray, nocolor
};
colorType getColorType();
void setColorType(colorType cColortype);
string getColorText() const;
private:
colorType cColortype = nocolor;
map<int, string> colors = {
{black, "black"},
{blue, "blue"},
{green, "green"},
{cyan, "cyan"},
{red, "red"},
{magenta, "magenta"},
{brown, "brown"},
{lightgray, "lightgray"},
{nocolor, "nocolor"}};
};
color.cpp:
color::color() {
}
color::colorType color::getColorType() {
return cColortype;
}
void color::setColorType(colorType cColortype) {
this->cColortype = cColortype;
}
string color::getColorText() const {
return colors[cColortype];
}
Я получаю следующее сообщение об ошибке:
color.cpp:16:29: error: passing 'const std::map >' as 'this' argument of 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](std::map<_Key, _Tp, _Compare, _Alloc>::key_type&&) [with _Key = int; _Tp = std::basic_string; _Compare = std::less; _Alloc = std::allocator > >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = std::basic_string; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = int]' discards qualifiers [-fpermissive]
Ошибка относится к «цветам возврата [cColortype]»; в getColorText.
Я пишу это для проекта класса, и я могу заставить его работать ради назначения, удалив объявление const в подписи getColorText, но я пытаюсь изучить/принять хорошие практики и придерживаться рекомендуется использовать const для функций-членов, которые не изменяют данные, поэтому я хочу знать, как справиться с этим.
Я обычно хорошо разбираюсь в отладке/поиске неисправностей, но сообщение об ошибке настолько запутано, что это не очень помогает.
Любая помощь приветствуется.
Моим первым предложением было бы удалить оператор индекса в цвете :: getColorText() const с std :: map <> :: найти вызов соответствующим образом. – nakiya