【发布时间】:2018-04-24 16:01:04
【问题描述】:
我想使用一元函数在带有 std::find 的列表中查找某个参数名称
class Parameter {
public:
string getName() { return mName;}
//string mName;
private:
string mName;
string mType;
string mValue;
};
class Param_eq : public unary_function<Parameter, bool> {
string mName;
public:
Param_eq (const string& name) : mName(name) {}
bool operator() (const Parameter& par) const {
return (mName == par.getName());
}
};
double Config::getDouble(string& name) {
list<Parameter>::iterator iParam = find(mParamList.begin(), mParamList.end(), Param_eq(name));
double para = iParam->getDouble();
return para;
}
}
但我得到以下编译器错误
error C2662: 'Parameter::getName' : cannot convert 'this' pointer from 'const Parameter' to 'Parameter &'
Conversion loses qualifiers
如果我将成员变量 Parameter::mName 设为 public 并在 Param_eq::operator() 的返回语句中使用它而不是成员函数 Parameter::getName() 则编译不会出错。
bool operator() (const Parameter& par) const {
return (mName == par.mName);
}
这是为什么呢?成员变量和成员函数都是字符串类型。
如何使用成员函数使上述示例工作?
【问题讨论】:
-
哪一行导致错误?
-
string getName() const { return mName;}你有Param_eq接受一个常量Parameter,但是说getName可能会修改它被调用的对象。这就是编译器试图告诉你的。
标签: c++ algorithm unary-function