从QList中删除项目会引发错误

时间:2017-09-15 13:47:35

标签: c++ qt qt4

如何删除对象表单Qlist

.

它抛出错误 C:\ Qt \ Qt5.7.0 \ 5.7 \ mingw53_32 \ include \ QtCore \ qlist.h:972:错误:'operator =='不匹配(操作数类型为'CascadeJobInfo'和'const CascadeJobInfo')              if(n-> t()== t)                         ^

2 个答案:

答案 0 :(得分:2)

您需要为operator==类型实施CascadeJobInfo

class CascadeJobInfo
{
public:
    <...>
    bool operator==(const CascadeJobInfo & other) const;
    <...>
};

bool CascadeJobInfo::operator==(const CascadeJobInfo & other) const
{
    if (this == &other) {
        return true;
    }

    bool equal = <...compare each data member within this object with its counterpart in other...>;
    return equal;
}

official documentation说得很清楚:

  

此函数需要值类型具有实现   运算符==()。

此外,您还不清楚要从代码段中实现的目标。在迭代列表时尝试删除每个列表的项目有一个更简单的替代方法:方法clear()

答案 1 :(得分:1)

您不是在询问如何从列表中删除“ ”对象,而是如何删除所有对象。使用clear()

m_InternJobInfoList.clear();

如果您询问如何仅删除某些谓词为真的对象,则需要使用erase代替:

auto & list = m_InternJobInfoList;
auto const pred = [](const CascadeJobInfo &){ return true; };
list.erase(std::remove_if(list.begin(), list.end(), pred), list.end());

当然pred可以做更有用的事情。

future C++和Qt中,希望您能够完成

erase_if(list, pred);