C++编译错误非类类型

Poo*_*rna 2 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;
}
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 5

->(即成员访问运营商)的优先级高于*(即间接运营商),因此

*it->get_id();
Run Code Online (Sandbox Code Playgroud)

被解释为:

*(it->get_id()); 
Run Code Online (Sandbox Code Playgroud)

这会导致编译错误.

你需要的是这个:

(*it)->get_id();
Run Code Online (Sandbox Code Playgroud)

见表:


两个要点:

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

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