2011-04-21 58 views
0

很抱歉的模糊問題的標題,但我在這裏有這些類型定義:的std ::列表迭代器沒有得到分配

class foo 
{ 
Timeline timeline; 
Keyframe left,right; 
}; 

我:

typedef std::list<AnimationKeyframe> Timeline; 
typedef Timeline::iterator Keyframe; 

,並讓我們說這樣的類也有一個複製/分配的構造函數,因爲我存儲迭代器(似乎是一個壞主意), 和麻煩就在那裏。

Keyframe myTemp, hisTemp; 
this->left = this->timeline.begin(); // assigns 
myTemp = this->timeline.begin(); // assigns 
hisTemp = that.timeline.begin() // does not assign 

只要我試圖分配一個關鍵幀與「明」(其他富)之一,我得到的是看起來像一個模糊問題的錯誤。

二進制 '=':沒有操作員發現它 採用類型 '的std :: _ List_const_iterator < _Mylist>' 的右邊的操作數 (或沒有可接受的轉化率)

附加info:

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>> 
] 

是什麼導致了這種奇怪的行爲? 我懷疑我使用迭代器作爲狀態的壞風格......但我不知道除了保持指針之外我還能做些什麼。

回答

6

它看起來好像thatconst(也許是一個const引用)。 begin() const返回const_iterator,而不是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 
} 
+0

感謝清除它了,現在非常有意義。 – Erius 2011-04-21 14:46:53