gpt4 book ai didi

c++ - 在 C++ 中必须使用 remove_if 调用对非静态成员函数的引用

转载 作者:行者123 更新时间:2023-11-30 04:58:08 27 4
gpt4 key购买 nike

我可以将 remove_if 函数与下面的 test() 函数一起使用。但是,当我尝试将对象传递给 remove_if 时,出现了本文标题中提到的错误。我个人认为错误与变量/函数范围有关。

我的代码:

#include "Student_info.h"
#include <string>
#include <vector>
#include "Grade_gen.h"
#include <algorithm>
#include <iterator>
#include <list>

using std::vector; using std::remove_if;

bool Grade_gen::has_passed(Student_info& student){

if (student.grade() > 60)
{
return true;
}
return false;
}

bool test(Student_info& student)
{
return true;
}

std::list<Student_info>::iterator Grade_gen::process_students(std::list<Student_info>& students)
{
remove_if(students.begin(), students.end(), has_passed);

// this is just to test the scope of the functions in the class, they work.
std::list<Student_info>::iterator b = students.begin();
has_passed(*b);
return b;
}

#include "Student_info.h"
#include <string>
#include <vector>
#include <list>

class Grade_gen
{
public:
std::vector<Student_info> students;
bool has_passed(Student_info&);
std::list<Student_info>::iterator process_students(std::list<Student_info>&);
private:

};

最佳答案

问题是你正在遍历 students 容器,它不能比 Student_info 类型的对象看得更远,但是你要调用的方法定义在Grade_gen 类。为了能够使用调用 remove_if 的对象,我建议传递一个捕获 this 的 lambda 函数(在这种情况下,this 是类型Grade_gen*).

remove_if(
students.begin(),
students.end(),
[this](Student_info& si) { return this->has_passed(si); }
);

示例:https://ideone.com/TfMKDf

关于c++ - 在 C++ 中必须使用 remove_if 调用对非静态成员函数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51790314/

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