我已经实现了一个列表和迭代器模板,find方法应该接收一个仿函数,所以我声明并实现了一个,但我不断得到错误,那里没有这样的对象! " 没有匹配函数来调用const类型的对象findBond "
这里是find方法的实现:
class findBond{
Bond& bond;
public:
findBond( Bond& bond1) : bond(bond1) {}
bool operator() (Bond& bond1){
return bond==bond1;
}
};
这里是功能对象:
void InvestmentBroker :: addBond(const string& name, double value, int amount ){
Bond bond = *new Bond(name, value, amount);
if (bondsDatabase.find(findBond(bond)) != bondsDatabase.end()) {
//throw an exception
} else {
// insert bond to dataBase
}
}
我试图在这里使用它们:
{{1}}
我包含了所需的文件,因此它与包含
无关出了什么问题?我在这里错过了什么?
答案 0 :(得分:1)
您的find方法以const Predicate&
为参数。这意味着您只能调用谓词的const
方法。但是,您的仿函数调用运算符未声明为const
。您可以通过声明const
来解决您的问题:
bool operator() (Bond& bond1) const {/* do stuff */ }
声明末尾的const
表示您无法在功能中修改this
,这反过来意味着您可以在const
上调用该功能对象
答案 1 :(得分:1)
对我来说,这似乎是一个常量问题 - findBond
在大多数参数上应该是const
。
将findBond
更改为此
class findBond{
const Bond& bond;
public:
findBond( const Bond& bond1) : bond(bond1) {}
bool operator() const ( const Bond& bond1){
return bond==bond1;
}
};