C++ “erreur: le passage de 'const std::map<int, std::basic_string<char> >' que 'ce' argument de ...”

Avec le code suivant (extrait par souci de concision):

couleur.h:

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

J'obtiens l'erreur suivante:

couleur.rpc:16:29: erreur: passage de 'const std::map >' que 'ce' argument de 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](std::map<_Key, _Tp, _Compare, _Alloc>::key_type&&) [avec _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] " rejets qualificatifs [-fpermissive]

L'erreur fait référence à "restituer les couleurs[cColortype];" dans getColorText.

J'écris ceci pour un projet de classe et je peux l'obtenir pour travailler pour le bien de la cession, par la suppression de la const déclaration dans le getColorText signature, mais je suis en train d'apprendre ou d'adopter de bonnes pratiques, et d'adhérer à la recommandation de l'utilisation de const pour les fonctions de membres qui ne modifiez pas les données donc je veux savoir comment faire face à cette aller de l'avant.

D'habitude je suis vraiment bon à débogage/dépannage mais le message d'erreur est tellement alambiqué qu'il n'est pas beaucoup d'aide.

Toute aide est appréciée.

  • Ma première suggestion serait de supprimer l'indice de l'opérateur de couleur::getColorText() const avec un std::map<>::find de façon appropriée.
InformationsquelleAutor WXB13 | 2013-11-29