代码如下(为简洁起见摘录):
颜色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];
}
我得到以下错误:
颜色cpp:16:29:错误:传递“const std::map”
错误指的是“返回颜色[cColortype];”在getColorText中。
我写这篇文章是为了一个类项目,我可以通过删除getColorText签名中的const声明来让它工作,但我正在尝试学习/采用良好的实践,并遵循建议,在不修改数据的成员函数中使用const,所以我想知道如何处理这个问题。
我通常非常擅长调试/故障排除,但错误信息非常复杂,没有多大帮助。
感谢您的帮助。
第一:地图地图
map<cColorType, string> colors
第二:正如一些人已经回答过的:
map::运算符[]()
不是const
。原因是这个运算符返回一个引用,它允许您修改它的值。
我建议以下解决方案:您可以创建第二个私有属性:字符串格式的颜色。因此,您将有两个Get函数(每种颜色一个)和一个Set函数(将修改两个颜色属性)。
关键就在最后:“放弃资格赛”getColorText
是一个const
成员函数,因此colors
是const
。但是map::operator[]()
不是const
。
string color::getColorText() const {
return colors[cColortype];
}
问题是您已将函数标记为const
。std::map
上的运算符[]
被标记为非常量,不能用于这样的常量函数。您需要手动使用std::map::find
(或其他机制)来搜索输入类型,并处理未找到的情况。
如果您使用的是C11,您可以使用std::map::at
,它允许在常量映射上使用,如果请求的元素不存在,则会引发异常。
在gcc 5.4.0上,从const C std::map获取条目时无法编译。 这看起来类似于传递“const”。此参数丢弃限定符[-fppermissive],它是关于
我有与这里、这里或这里相同的问题,除了我为参数和函数设置了const: 但我有同样的编译错误:
错误:将“const A”作为“void A::hi()”的“this”参数传递会丢弃限定符[-fppermissive] 我不明白为什么会出现这个错误,我没有返回任何东西,只是传递了对象的引用,就是这样。 编辑 我用const correction修复了它,但是现在我试图在同一个方法中调用方法,我得到了同样的错误,但奇怪的是我没有传递这个方法的引用。 错误:将“const A”作为“void A
这是我在这里的第一个问题! 我试图将一个Map作为参数从struts动作传递给一个报告。我已经在reportParameters映射中插入了映射,该映射将被传递给jrxml文件。 我的问题是这个Map是否可以在jrxml文件中检索。 更准确地说,我声明如下: 我想这样使用它: 这可能吗?因为我在应用程序服务器日志中不断收到此错误: 我的动作类如下: 任何提示都会有帮助!
代码如下: 我假设错误发生在insert函数中,并且与参数初始化有关。 bintree.cpp:65:27:错误:使用删除的函数'std::unique_ptr<_tp,_dp>::unique_ptr(const std::unique_ptr<_tp,_dp>&)[with_tp=bintreenode;_dp=std::default_delete>]“tree.insert(tree.ro
下面是一个基本的代码片段,我得到了一个错误: 错误:传递'constd::map 注意:我知道我可以在不使用的情况下删除点,但上面的代码片段只是一个更大问题的示例。 我检查了一些关于类似错误的问题: 错误:传递constd::映射 但在这两种情况下,都是因为被声明为。另一方面,我试图使用/访问的