C++ 无法转换';这';来自';常数CDrawnLabel';至';CDrawnLabel&';
我需要一个用户定义的设置,根据我想要的顺序。但是当我想访问集合成员时,我得到了错误该对象的类型限定符与成员函数不兼容(当我将鼠标指针放在错误行上时,我得到了这个错误。标题中提到的错误是生成后的fromm error List)C++ 无法转换';这';来自';常数CDrawnLabel';至';CDrawnLabel&';,c++,set,C++,Set,我需要一个用户定义的设置,根据我想要的顺序。但是当我想访问集合成员时,我得到了错误该对象的类型限定符与成员函数不兼容(当我将鼠标指针放在错误行上时,我得到了这个错误。标题中提到的错误是生成后的fromm error List) 出现此错误的原因是std::set中的键存储为const T。 所以这个表达式(*itbegin)返回一个常量CDrawnLabel。只能从常量对象调用常量成员函数 您将必须使GetLable保持恒定。此外,由于常量成员函数只能返回常量指针/引用,因此该成员应: cons
出现此错误的原因是
std::set
中的键存储为const T
。
所以这个表达式(*itbegin)
返回一个常量CDrawnLabel
。只能从常量对象调用常量成员函数
您将必须使GetLable保持恒定。此外,由于常量成员函数只能返回常量指针/引用,因此该成员应:
const LabelRect* getLabelRect() const { return &m_LabelRect; }
虽然不是必需的,但最好将比较器设置为常量,因为它不会修改任何数据。可以做的另一个改进是,不使用引用,而是将const ref传递给比较器
bool operator<(const CDrawnLabel &rhs) const
{
//This is the set ordering
return getLabelRect()->right < rhs.getLabelRect()->right;
}
bool操作符右侧右侧;
}
出现此错误的原因是std::set
中的键存储为const T
。
所以这个表达式(*itbegin)
返回一个常量CDrawnLabel
。只能从常量对象调用常量成员函数
您将必须使GetLable保持恒定。此外,由于常量成员函数只能返回常量指针/引用,因此该成员应:
const LabelRect* getLabelRect() const { return &m_LabelRect; }
虽然不是必需的,但最好将比较器设置为常量,因为它不会修改任何数据。可以做的另一个改进是,不使用引用,而是将const ref传递给比较器
bool operator<(const CDrawnLabel &rhs) const
{
//This is the set ordering
return getLabelRect()->right < rhs.getLabelRect()->right;
}
bool操作符右侧右侧;
}
这里的问题是std::set::iterator
实际上是一个const\u迭代器
,因此(*itbegin)
具有类型const CDrawnLabel&
。为什么会这样?如果你能改变集合中的引用,你就可以使排序无效。因此,您需要将对象从集合中取出,对其进行修改,然后将其放回集合中。或者,如果您不想更改它,您可以定义一个常量函数getConstLabelRect()
这里的问题是std::set::iterator
实际上是一个const\u迭代器(*itbegin)
具有类型constcdrawnlabel&
。为什么会这样?如果你能改变集合中的引用,你就可以使排序无效。因此,您需要将对象从集合中取出,对其进行修改,然后将其放回集合中。或者,如果您不想更改它,可以定义一个常量函数getConstLabelRect()
,您可以在其中编写:itbegin=m_setDrawnLabel.end()你真的是指itend=m_setDrawnLabel.end()代码>?谢谢。更正@Arunasand为了清楚起见,你是否在课堂上遗漏了public:
?或者这就是为什么您无法访问编辑的getLabelRect()。谢谢@arunas您在最后一块中调用代码的上下文是什么?常量成员函数?您可以在其中编写:itbegin=m_setDrawnLabel.end()你真的是指itend=m_setDrawnLabel.end()代码>?谢谢。更正@Arunasand为了清楚起见,你是否在课堂上遗漏了public:
?或者这就是为什么您无法访问编辑的getLabelRect()。谢谢@arunas您在最后一块中调用代码的上下文是什么?常量成员函数?但在&m_labelRect“返回值类型与函数类型不匹配”处出现新错误@Farsanashid更新了我的答案以包含进一步建议。但在&m_labelRect“返回值类型与函数类型不匹配”处出现新错误@Farsanashid更新了我的答案以包含进一步的建议。std::set::iterator正在返回一个迭代器。迭代器所指向的值的类型本身就是常量。这不正是常量迭代器吗?如果我查看我的STL实现,迭代器和const_迭代器是同一事物的typedef。std::set::iterator返回一个迭代器。迭代器所指向的值的类型本身就是常量。这不正是常量迭代器吗?如果我研究一下我的STL实现,迭代器和const_迭代器是同一事物的typedef。
bool operator<(const CDrawnLabel &rhs) const
{
//This is the set ordering
return getLabelRect()->right < rhs.getLabelRect()->right;
}