在std :: find_if中编译错误

时间:2016-01-24 20:20:02

标签: c++ ptr-vector

有谁能解释我在这里做错了什么?

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]

2 个答案:

答案 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));        
}