簡體   English   中英

錯誤:對於操作數類型 std::vector::iterator 和 __gnu_cxx::__normal_iterator 不匹配“operator=”

[英]error: no match for 'operator=' for operand types std::vector::iterator and __gnu_cxx::__normal_iterator

我收到一個非常嚴重的錯誤,因為當我嘗試從 find_if 分配給預定義的迭代器時,顯然我的迭代器類型不匹配。 我沒有使用 auto 是因為我想從 for 循環中排除定義以避免重新分配。

這是本質上的錯誤:

../components/aurora_fsm/aurora_fsm.cpp: In member function 'FSM_StateBase* FSM_StateBase::FollowBits(EventBits_t)':
../components/aurora_fsm/aurora_fsm.cpp:43:118: error: no match for 'operator=' (operand types are 'std::vector<FSM_StateBase*>::iterator' {aka '__gnu_cxx::__normal_iterator<FSM_StateBase**, std::vector<FSM_StateBase*> >'} and '__gnu_cxx::__normal_iterator<FSM_StateBase* const*, std::vector<FSM_StateBase*> >')
             [&s_checked](FSM_StateBase* const state) { if (!s_checked.count(state)) { return true; } return false; } );

這是我對相關方法的實現,僅包含相關細節:

FSM_StateBase* FSM_StateBase::FollowBits()
{
    std::vector<FSM_StateBase*> v_tmp_path = { this };
    std::unordered_set<FSM_StateBase*> s_checked;

    std::vector<FSM_StateBase*>::iterator it;

    for (;;) {
        // find new state that is not checked
        auto& v_adjacent = v_tmp_path.back()->GetAdjacentStates();
        it = std::find_if(begin(v_adjacent), end(v_adjacent), 
            [&s_checked](FSM_StateBase* const state) { if (!s_checked.count(state)) { return true; } return false; } );
        
        // ...
    }
    // ..
}

但我不知道要改變什么才能使這項工作? 畢竟, find_if 應該為指定類型的向量(在我的例子中為FSM_StateBase* )返回一個迭代器,這正是我定義it ......

編輯(為清楚起見):

const std::vector<FSM_StateBase*>& FSM_StateBase::GetAdjacentStates(void) {
    return adjacent_states_;
}

class FSM_StateBase
{
protected:
    std::vector<FSM_StateBase*>             adjacent_states_;
    // ...
}

std::find_if將返回傳遞給它的相同類型的迭代器。

v_adjacent的類型為const std::vector<FSM_StateBase*>& 注意const是類型的一部分。 這個const意味着這個容器的迭代器將是常量迭代器。

it ,另一方面,是不是一個常數迭代器。


錯誤消息中有一個提示,它說賦值的左側(變量it )是類型

__gnu_cxx::__normal_iterator<FSM_StateBase**, std::vector<FSM_StateBase*> >

賦值右側的類型( std::find_if返回的std::find_if )是

__gnu_cxx::__normal_iterator<FSM_StateBase* const*, std::vector<FSM_StateBase*> >

注意constFSM_StateBase* const*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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