0

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

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):注意:请参阅使用 [ _InIt=boost::void_ptr_iterator 编译的函数模板实例化 '_InIt std::_Find_if<_Iter,_Pr>(_InIt,_InIt,_Pr)' 的参考>>,var_T::Base_Type>, _Iter=boost::void_ptr_iterator>>,var_T::Base_Type>, _Pr=var_T::tVector_it]

4

2 回答 2

2

你有一个名为 的结构findVariable,然后你有一个名为 的函数findVariable

在函数中,当您findVariable(_name)不创建结构实例时,您会递归调用该函数。并且该函数不会返回您可以用作谓词的内容,std::find_if因此编译器会给您一个错误。

简单的解决方案?重命名您的结构或函数。

于 2016-01-24T20:29:13.753 回答
1

findVariablefindVariable(_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));        
}
于 2016-01-24T20:29:20.897 回答