对于模糊的问题标题感到抱歉,但我在这里有这些typedef:
typedef std::list<AnimationKeyframe> Timeline;
typedef Timeline::iterator Keyframe;
让我们说一个这样的课:
class foo
{
Timeline timeline;
Keyframe left,right;
};
我还有一个复制/赋值构造函数,因为我正在存储迭代器(看起来很糟糕), 麻烦就在那里。
Keyframe myTemp, hisTemp;
this->left = this->timeline.begin(); // assigns
myTemp = this->timeline.begin(); // assigns
hisTemp = that.timeline.begin() // does not assign
一旦我尝试使用'that'(另一个foo)中的一个来指定一个Keyframe,我会得到看起来像模糊问题的错误。
binary'=':没有运算符找到哪个 采用类型的右手操作数 '的std :: _ List_const_iterator&LT; _Mylist&GT;' (或者没有可接受的转换)
其他信息:
with
[
_Mylist=std::_List_val<AnimationKeyframe,std::allocator<AnimationKeyframe>>
]
could be 'std::_List_iterator<_Mylist> &std::_List_iterator<_Mylist>::operator =(const std::_List_iterator<_Mylist> &)'
with
[
_Mylist=std::_List_val<AnimationKeyframe,std::allocator<AnimationKeyframe>>
]
while trying to match the argument list '(Keyframe, std::_List_const_iterator<_Mylist>)'
with
[
_Mylist=std::_List_val<AnimationKeyframe,std::allocator<AnimationKeyframe>>
]
导致这种奇怪行为的原因是什么? 我怀疑使用迭代器作为状态的糟糕方式......但我不知道除了保持指针之外我还能做些什么。
答案 0 :(得分:6)
看起来that
是const
(也许是const引用)。 begin() const
会返回const_iterator
,而不是iterator
。
没有从const_iterator转换为迭代器的原因如下:
void foo(const std::vector<int> &vec) {
std::vector<int>::iterator it = vec.begin(); // if this compiled...
*it = 5; // then this would attempt to modify a vector taken by const ref
}