有谁能解释我在这里做错了什么?
class Base_Type
{
public:
string name;
int localType;
};
boost::ptr_vector<Base_Type> tVector;
struct findVariable
{
findVariable(const string& name) : _name(name) {};
const string& _name;
bool operator () (const Base_Type& arg) const
{
return (_name == arg.name);
}
};
typedef boost::ptr_vector<Base_Type>::iterator tVector_it;
inline tVector_it findVariable(string& _name)
{
return find_if(tVector.begin(), tVector.end(), findVariable(_name));
}
编译错误:
... \ _vc \ include \ _ algorithm(43):错误C2064:术语不评估为带有1个参数的函数
... \ _vc \ include \ _ algorithm(54):注意:请参阅函数模板的参考 实例化&#39; _InIt std :: _ Find_if&lt; _Iter,_Pr&gt;(_ InIt,_InIt,_Pr)&#39;存在 用[编译] _Init =升压:: void_ptr_iterator&GT;&GT;,var_T :: Base_Type&gt;中 _Iter =升压:: void_ptr_iterator&GT;&GT;,var_T :: Base_Type&gt;中 _Pr = var_T :: tVector_it]
答案 0 :(得分:2)
您有一个名为findVariable
的结构,然后您有一个名为findVariable
的函数。
在函数中,当您执行findVariable(_name)
时不创建结构实例时,可以递归调用该函数。并且该函数不返回可用作std::find_if
的谓词的内容,因此编译器会给出错误。
简单的解决方案?重命名您的结构或功能。
答案 1 :(得分:1)
findVariable
既是函数的名称,也是您在findVariable(_name)
语句中调用find_if
时要创建对象的结构名称。
只需重命名其中一个,例如:
struct findVariableHelper
{
findVariableHelper(const string& name) : _name(name) {};
const string _name;
bool operator () (const Base_Type& arg) const
{
return (_name == arg.name);
}
};
typedef boost::ptr_vector<Base_Type>::iterator tVector_it;
inline tVector_it findVariable(string& _name)
{
return find_if(tVector.begin(), tVector.end(), findVariableHelper(_name));
}