具有成员函数的一元谓词
Unary predicate with member function
我想使用一元函数在列表中查找某个参数名称 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::mNamepublic并在Param_eq::operator的return语句中使用它代替成员函数Parameter::getName() () 它编译没有错误。
bool operator() (const Parameter& par) const {
return (mName == par.mName);
}
这是为什么?成员变量和成员函数都是字符串类型。
如何使用成员函数使上述示例运行?
该错误告诉您正在对常量引用调用非常量方法。非 const 方法可能会修改成员变量,从而违反 const 约束。
您可以通过两种方式解决:
根本不调用方法,直接访问mName
变量:
bool operator() (const Parameter& par) const {
return (mName == par.mName);
}
请注意,这不需要制作 mName
public。这是有效的,因为 operator()
是 Parameter
class 的成员。请记住,私有成员可以在 class 的任何方法中访问。您是否访问同一 class 的另一个实例的私有成员并不重要。
声明getName()
为const
个对象:
string getName() const { return mName;}
注意 const
限定符的位置。这告诉编译器该方法不会修改任何成员变量。
我想使用一元函数在列表中查找某个参数名称 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::mNamepublic并在Param_eq::operator的return语句中使用它代替成员函数Parameter::getName() () 它编译没有错误。
bool operator() (const Parameter& par) const {
return (mName == par.mName);
}
这是为什么?成员变量和成员函数都是字符串类型。
如何使用成员函数使上述示例运行?
该错误告诉您正在对常量引用调用非常量方法。非 const 方法可能会修改成员变量,从而违反 const 约束。
您可以通过两种方式解决:
根本不调用方法,直接访问
mName
变量:bool operator() (const Parameter& par) const { return (mName == par.mName); }
请注意,这不需要制作
mName
public。这是有效的,因为operator()
是Parameter
class 的成员。请记住,私有成员可以在 class 的任何方法中访问。您是否访问同一 class 的另一个实例的私有成员并不重要。声明
getName()
为const
个对象:string getName() const { return mName;}
注意
const
限定符的位置。这告诉编译器该方法不会修改任何成员变量。