[英]error: cannot convert ‘__gnu_cxx::__normal_iterator<Player*, std::vector<Player> >’ to ‘int’ in return
[英]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*> >
注意const
在FSM_StateBase* const*
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.