在下面我收到错误错误:请求'* it'中的成员'get_id',这是非类型'const Param * const'。下面的代码有什么问题
bool SomeParams::is_default(int _id) const
{
vector<const Param*> param_list;
bool is_default = false;
if( get_default_params(param_list) ) // This populates param_list
{
vector<const Param*>::const_iterator it = param_list.begin();
for(;it!=param_list.end();++it)
{
if( *it->get_id() == _id ) // get_id is function in Param object
{
is_default = true;
break;
}
}
}
return is_default;
}
答案 0 :(得分:5)
->
(即成员访问运算符)的优先级高于*
(即间接运算符),所以
*it->get_id();
被解释为:
*(it->get_id());
导致编译错误。
你需要的是:
(*it)->get_id();
见表:
两个要点:
函数参数的名称以_
开头,is_default
根据语言规范调用未定义的行为。以下划线开头的名称是保留的。不要使用它们。
函数名称为is_default
,函数内部有一个变量,也是{{1}}。为什么不为变量选择不同的名称?这样可以提高代码的可读性。
答案 1 :(得分:4)
将*it
括在括号中:(*it)->get_id()
。