C ++编译错误非类类型

时间:2011-06-15 16:32:58

标签: c++ compiler-errors

在下面我收到错误错误:请求'* 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;
}

2 个答案:

答案 0 :(得分:5)

->(即成员访问运算符)的优先级高于*(即间接运算符),所以

*it->get_id();

被解释为:

*(it->get_id()); 

导致编译错误。

你需要的是:

(*it)->get_id();

见表:


两个要点:

  • 函数参数的名称以_开头,is_default根据语言规范调用未定义的行为。以下划线开头的名称是保留的。不要使用它们。

  • 函数名称为is_default,函数内部有一个变量,也是{{1}}。为什么不为变量选择不同的名称?这样可以提高代码的可读性。

答案 1 :(得分:4)

*it括在括号中:(*it)->get_id()