更新
这是给我带来麻烦的方法:
void A::normalizeUrls()
{
for (set<CUrl>::iterator it = _references.begin(); it != _references.end(); ++it)
{
if (it->isValid())
{
it->normalize().makeFull(_baseUrl);
}
}
}
这里是CUrl :: normalize和CUrl :: makeFull
CUrl& makeFull (CUrl&)
{
return *this;
}
CUrl& CUrl::normalize()
{
return *this;
}
错误是:CUrl::normalize' : cannot convert 'this' pointer from 'const CUrl' to 'CUrl &'
left of '.makeFull' must have class/struct/union
为什么会这样,我错过了什么?
提前致谢!
答案 0 :(得分:3)
auto
会删除引用。我不知道auto&
是否有效,但如果不是,则必须明确指定CUrl&
。
答案 1 :(得分:2)
似乎_references.begin()
调用返回的是const_iterator而不是常规迭代器。 _references
变量是对集合的const引用吗?
但这绝对是迭代器的 const 状态的问题。以下代码编译:
if (it->isValid())
{
CUrl &ref = const_cast<CUrl&>(*it);
ref.normalize().makeFull(_baseUrl);
}
答案 2 :(得分:2)
实际上,集合的成员是const
(不可变),因此你不能在它们上调用非const成员函数。
如果允许,您可以更改其值并使集合的顺序无效。