>' as ' this' argument of ..."-6ren"> >' as ' this' argument of ..."-使用以下代码(为简洁起见摘录): 颜色.h: class color { public: color(); enum colorType { black, blue, -6ren">
gpt4 book ai didi

C++ "error: passing ' const std::map>' as ' this' argument of ..."

转载 作者:可可西里 更新时间:2023-11-01 16:25:21 26 4
gpt4 key购买 nike

使用以下代码(为简洁起见摘录):

颜色.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"}};
};

颜色.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]

错误指的是“return colors[cColortype];”在 getColorText 中。

我正在为一个类(class)项目写这篇文章,我可以通过删除 getColorText 签名中的 const 声明来让它工作以完成作业,但我正在努力学习/采用良好实践并遵守建议对不修改数据的成员函数使用 const,所以我想知道如何处理这个问题。

我通常非常擅长调试/故障排除,但错误消息非常复杂,没有太大帮助。

感谢任何帮助。

最佳答案

string color::getColorText() const {
return colors[cColortype];
}

问题是您将函数标记为 conststd::map 上的 operator[] 被标记为非常量,不能像这样在 const 函数中使用。您需要手动使用 std::map::find(或其他机制)来搜索输入类型并处理未找到的情况。

如果您使用的是 C++11,则可以改用 std::map::at,它允许在常量映射上使用,并在请求时抛出异常元素不存在。

关于C++ "error: passing ' const std::map<int, std::basic_string<char>>' as ' this' argument of ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20277671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com