簡體   English   中英

不匹配operator =使用std :: vector

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM