std::find_if 中的编译错误
Compile error in std::find_if
谁能解释一下我做错了什么?
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): error C2064: term does not evaluate to a function taking 1 arguments
...\vc\include\algorithm(54): note: see reference to function template
instantiation '_InIt std::_Find_if<_Iter,_Pr>(_InIt,_InIt,_Pr)' being
compiled with [
_InIt=boost::void_ptr_iterator>>,var_T::Base_Type>,
_Iter=boost::void_ptr_iterator>>,var_T::Base_Type>,
_Pr=var_T::tVector_it ]
您有一个名为 findVariable
的结构,然后您有一个名为 findVariable
的函数。
在函数中,当您执行 findVariable(_name)
时,您不会创建结构实例,而是递归调用该函数。并且该函数没有 return 可以用作 std::find_if
的谓词的东西,因此编译器会给您一个错误。
简单的解决方案?重命名您的结构或函数。
findVariable
既是函数的名称,也是在 find_if
语句中调用 findVariable(_name)
时要用来创建对象的结构的名称。
只需重命名其中之一,例如:
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));
}
谁能解释一下我做错了什么?
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): error C2064: term does not evaluate to a function taking 1 arguments
...\vc\include\algorithm(54): note: see reference to function template instantiation '_InIt std::_Find_if<_Iter,_Pr>(_InIt,_InIt,_Pr)' being compiled with [ _InIt=boost::void_ptr_iterator>>,var_T::Base_Type>, _Iter=boost::void_ptr_iterator>>,var_T::Base_Type>, _Pr=var_T::tVector_it ]
您有一个名为 findVariable
的结构,然后您有一个名为 findVariable
的函数。
在函数中,当您执行 findVariable(_name)
时,您不会创建结构实例,而是递归调用该函数。并且该函数没有 return 可以用作 std::find_if
的谓词的东西,因此编译器会给您一个错误。
简单的解决方案?重命名您的结构或函数。
findVariable
既是函数的名称,也是在 find_if
语句中调用 findVariable(_name)
时要用来创建对象的结构的名称。
只需重命名其中之一,例如:
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));
}