【发布时间】:2025-12-21 12:05:16
【问题描述】:
我有两个班级:
#include <iostream>
#include <vector>
#include <string>
#include <stdexcept>
#include <algorithm>
#include <cmath>
#include <list>
using namespace std;
enum class Programm{Koch, Normal, Bunt, Fein};
class KleidSt {
private:
string bezeichnung;
int gewicht;
Programm Pflegehinweis;
public:
KleidSt(string bezeichnung, int gewicht);
KleidSt(string bezeichnung, int gewicht, Programm Pflegehinweis);
int get_gewicht() const;
bool vertraeglich(Programm)const;
int get_Pflegehinweis() const;
friend ostream& operator<<(ostream& os, const KleidSt& kleid);
};
class WaschM{
private:
int ladungsgewicht;
vector<KleidSt> wasch;
public:
WaschM(int ladungsgewicht);
void zuladen(const vector<KleidSt>& z);
void waschen(Programm);
friend ostream& operator<<(ostream& os, const WaschM& kleid);
int programme() const;
vector<KleidSt> aussortieren(Programm pr);
};
我想创建函数vector<KleidSt> aussortieren(Programm),它将删除wasch向量中的所有元素,如果这些元素具有更高的Pflegehinweis属性(通过使用static_cast<int>(elem)函数)然后由aussortieren函数定义并将返回一个已删除元素的向量。
我的第一次尝试是使用 Erase-remove idiom:
vector<KleidSt> WaschM::aussortieren(Programm pr){
wasch.erase(remove_if(begin(wasch), end(wasch), vertraeglich(pr)), end(wasch));
return wasch;
}
这里vertraeglich(pr) 完成了我上面描述的工作。
但它显然返回错误,因为vertraeglich 函数被定义在类WaschM 的范围之外。问题是:我怎样才能使用 Erase–remove idiom(或其他一些变体),这样代码才能工作?
【问题讨论】:
标签: c++