[英]no match for operator= using a std::vector
我有一個這樣的類聲明:
class Level
{
private:
std::vector<mapObject::MapObject> features;
(...)
};
在其中一個成員函數中,我嘗試迭代遍歷該向量,如下所示:
vector<mapObject::MapObject::iterator it;
for(it=features.begin(); it<features.end(); it++)
{
/* loop code */
}
這對我來說似乎很簡單,但是g ++給了我這個錯誤:
src/Level.cpp:402: error: no match for 'operator=' in 'it = ((const yarl::level::Level*)this)->yarl::level::Level::features.std::vector<_Tp, _Alloc>::begin [with _Tp = yarl::mapObject::MapObject, _Alloc =
std::allocator<yarl::mapObject::MapObject>]()'
/usr/include/c++/4.4/bits/stl_iterator.h:669: note: candidates are: __gnu_cxx::__normal_iterator<yarl::mapObject::MapObject*,
std::vector > >& __gnu_cxx::__normal_iterator<yarl::mapObject::MapObject*,
std::vector > >::operator=(const __gnu_cxx::__normal_iterator<yarl::mapObject::MapObject*, ``std::vector<yarl::mapObject::MapObject, std::allocator<yarl::mapObject::MapObject> > >&)
任何人都知道為什么會這樣嗎?
我猜這部分錯誤描述了你的問題:
(const yarl::level::Level*)this
成員函數是否在其中找到此代碼的const限定成員函數? 如果是這樣,您將需要使用const_iterator
:
vector<mapObject::MapObject>::const_iterator it;
如果成員函數是const限定的,那么只有成員向量上的begin()
和end()
的const限定重載才可用,並且這兩個都返回const_iterator
。
你在這里關閉了直角支架嗎?
vector<mapObject::MapObject::iterator it;
如果你想要一個對象矢量,你的對象需要一個operator =。 MapObject有一個嗎? 如果沒有,請考慮一個指向MapObject的指針向量。
@James McNellis的回答(“綠色檢查”最佳答案)用類似的描述修復了我的錯誤,但是我的錯誤是由@tmarthal提到他的回答帖子(沒有定義賦值運算符)引起的。 他建議的修復是包含一個賦值運算符,但我只是想補充一點,我也能通過使用std :: vector <> :: const_iterator而不是std :: vector <> :: iterator修復此錯誤,對於沒有賦值的類運算符已定義。 我不確定這是否真的是一個正確的解決方案,或者只是阻止編譯器抱怨的東西。
如果我是你,我會檢查mapObject :: MapObject是否有默認構造函數和公共賦值運算符。
在類標題的某處,你應該看到類似的東西:
public:
MapObject();
operator=(const MapObject &mapObject);
這意味着該類具有默認構造函數和賦值運算符。
使用沒有默認構造函數的類無法實例化std :: vector,並且如果沒有賦值運算符,則無法如上所述迭代該類。
因此,在類定義中添加賦值運算符,您的迭代將進行編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.