gpt4 book ai didi

c++ - std::remove 导致编译错误

转载 作者:太空狗 更新时间:2023-10-29 11:46:00 26 4
gpt4 key购买 nike

我正在尝试使用 question 的答案并得到奇怪的错误 -

/usr/include/c++/4.6/bits/stl_algo.h:162: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* with _Iterator = User*, _Container = std::vector, __gnu_cxx::__normal_iterator<_Iterator, _Container>::reference = User& == __val’

我正在使用 Linux(Ubuntu 64 位),也许这是个问题。提前致谢。

更新:我使用 remove() 的代码:

myVec.erase(std::remove(myVec.begin(), myVec.end(), vecMember), myVec.end());

最佳答案

std::remove 调用operator==,你需要为你的用户类型重载它:

假设您按名称比较用户:

bool operator==(const User& lhs, const User& rhs)
{
return lhs.name == rhs.name;
}

如果您仔细阅读,编译器消息会告诉您到底缺少什么。

或者使用 std::remove_if如果您使用 C++11,则使用 lambda

myVec.erase(std::remove(myVec.begin(), myVec.end(), 
[](const User& u){ return u.name == "name"; }), vec.end());

关于c++ - std::remove 导致编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14920397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com