矢量擦除习语编译错误

vector erase-remove idiom compile error

本文关键字:编译 错误 习语 擦除      更新时间:2023-10-16

我有以下removeOneParam(Parameter* param)代码,这是来自这个答案:

class A
    {
        private:
          std::vector<Parameter*> params;
        public:
          void removeOneParam(Parameter* param)
          {
            params.erase(std::remove(params.begin(), params.end(), param), params.end());
          }
}

但是我得到以下编译错误:

error: cannot convert ‘std::vector<Parameter*>::iterator {aka __gnu_cxx::__normal_iterator<Parameter**, std::vector<Parameter*> >}’ to ‘const char*’ for argument ‘1’ to ‘int remove(const char*)

我如何用这个答案来解决我的问题?

您的编译器在cstdio头中拾取std::remove的版本,而不是您想要的版本。你可能错过了#include <algorithm>

在我看来,标题algorithm不包括在内。试着

#include <algorithm>

尝试在程序的顶部包含include <algorithm>