2016-03-21 5 views
0

У меня есть простая функция, но она выводит вышеуказанную ошибку при компиляции. Я просмотрел похожие сообщения, но я правильно включил тип в свою декларацию, насколько я могу судить. Я просто пропустил что-то простое здесь?ISO C++ запрещает объявление «параметра» без типа

Заголовок:

int LinearSearch (const vector <Die> & searchVector, const <Die> & targetVal); 

Реализация:

int Game::LinearSearch (const vector <Die> & searchVector, const <Die> & targetVal) { 
    // Simple linear search function which will return the index of targetVal in the vector 
    // Returns null if the value isn't found 
    for (int i=0; i < searchVector.size(); i++) { 
     if (targetVal.pips == searchVector[i].pips) return i; 
    } 
    return nullptr; 
} 
+5

'const ' ??? – John3136

+1

Пожалуйста, укажите точное сообщение об ошибке в вопросе. Мы не можем сказать, на какой параметр он жалуется, или ошибка в объявлении или определении. –

ответ

3

Скобки по второму параметру неверны, так как они не используются, чтобы специализировать шаблонный класс, как в первом параметре (std::vector<Die> является специализацией шаблона std::vector), поэтому вам нужно удалить их во втором параметре.

Кроме того, вы не можете вернуть nullptr в качестве int, и даже если бы это было возможно, было бы неправильно это сделать. Ваш цикл возвращает индекс соответствующего элемента в vector, поэтому nullptr может быть ошибочно принят за индекс 0. Более подходящее значение для возврата, когда совпадение не найдено, будет вместо -1.

int LinearSearch (const vector<Die> &searchVector, const Die &targetVal); 

int Game::LinearSearch (const vector<Die> &searchVector, const Die &targetVal) { 
    // Simple linear search function which will return the index of targetVal in the vector 
    // Returns -1 if the value isn't found 
    for (int i=0; i < searchVector.size(); i++) { 
     if (targetVal.pips == searchVector[i].pips) return i; 
    } 
    return -1; 
} 

Это, как говорится, вы должны взглянуть на стандартной функции алгоритма std::find_if().

+2

Небольшая перегруппировка пробелов лучше иллюстрирует, что угловые скобки являются частью типа шаблона, а не типом элемента. –

+0

Спасибо! Это было действительно очевидно, я думаю, что мне просто нужно заснуть сегодня вечером. Кроме того, спасибо за подсказку о возврате нулевого указателя. –

+0

@BenVoigt согласился. Я обновил свой ответ, чтобы показать это. –

Смежные вопросы