Ошибка компиляции C ++ не типа класса - PullRequest
2 голосов
/ 15 июня 2011

Ниже я получаю ошибку как ошибку: запрос на член 'get_id' в '* it', который имеет неклассовый тип '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 ]

5 голосов
/ 15 июня 2011

Превосходство -> (т. Е. Оператор доступа к элементу) выше * (т. Е. Оператор косвенного обращения), поэтому

*it->get_id();

интерпретируется как:

*(it->get_id()); 

, что приводит к ошибке компиляции.

Что вам нужно, это:

(*it)->get_id();

См. Эту таблицу:


Два важных момента:

  • Имя параметра функции начинается с _, что в соответствии со спецификацией языка вызывает неопределенное поведение. Имена, начинающиеся с подчеркивания , зарезервированы. Не используйте их.

  • Имя функции - is_default, и внутри функции есть одна переменная, которая также is_default. Почему бы вам не выбрать другое имя для переменной? Это повысит читабельность вашего кода.

4 голосов
/ 15 июня 2011

Заключите *it в скобки: (*it)->get_id().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...