无法'this'指针从'const CDrawnLabel'转换为'CDrawnLabel &'
cannot convert 'this' pointer from 'const CDrawnLabel' to 'CDrawnLabel &'
根据我想要的顺序,我需要一个用户定义的集合。但是当我想访问集合成员时,我遇到了错误对象的类型限定符与成员函数不兼容(当我将鼠标指针放在错误行上时,我会遇到这个错误。标题中提到的错误来自构建后的错误列表)
typedef struct tagRECT
{
long left;
long top;
long right;
long bottom;
} RECT;
struct LabelRect : public RECT
{
bool isIsolatedFrom(LabelRect* pRect)
{
if (pRect->right < left ||
pRect->left > right ||
pRect->top > bottom ||
pRect->bottom < top)
return true;
return false;
}
};
class CDrawnLabel
{ public:
LabelRect m_LabelRect;
LabelRect* getLabelRect(){ return &m_LabelRect; }
bool operator<(CDrawnLabel & rhs)
{
//This is the set ordering
return getLabelRect()->right < rhs.getLabelRect()->right;
}
}
我有一套类似于
typedef std::set<CDrawnLabel> DrawnLabelSet;
DrawnLabelSet m_setDrawnLabel
我在尝试访问集合成员时出错
DrawnLabelSet::iterator itbegin,itend;
LabelRect* pRectSecond;
itbegin=m_setDrawnLabel.begin();
itend=m_setDrawnLabel.end();
pRectSecond=(*itbegin).getLabelRect();// Here I get the error.
出现此错误的原因是std::set<T>
中的键存储为const T
。因此,这个表达式(*itbegin)
返回一个const CDrawnLabel
。只能从const对象调用const成员函数。
您必须使getLableRect常量。此外,由于常量成员函数只能返回常量指针/引用,因此该成员应为:
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;
}
这里的问题是std::set<>::iterator
实际上是const_iterator
,所以(*itbegin)
的类型是const CDrawnLabel&
。为什么会这样?好吧,如果你能更改集合中的引用,你就可以使排序无效。因此,您需要将对象从集合中取出,对其进行修改,然后将其放回。或者,如果您不想更改它,您可以定义一个常量函数getConstLabelRect()
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 无法'this'指针从'const CDrawnLabel'转换为'CDrawnLabel &'