2017-01-18 11 views
0

Это базовая функция двоичного поиска для vector.I хочу получить доступ к функции get объекта, но я получаю ошибку.функция объекта вектора доступа к канту через -> оператор

bool binFindInVec(vector<Client> *vec,string sur){ 


    int from,to,pos; 

    from = 0; 
    to = vec->size()-1; 


    while(from<=to){ 

     pos = (from+to)/2; 
     if(vec[pos]->getSurname() == sur){ 
      return true; 
     } 
     else if(vec[pos]->getSurname() > sur){ 
      to = pos-1; 
     } 
     else{ 
      from = pos + 1; 
     } 
    } 
    return NULL;  
} 

ошибка:

In function 'bool binFindInVec(std::vector*, std::string)':
176 14 [Error] base operand of '->' has non-pointer type 'std::vector'
179 19 [Error] base operand of '->' has non-pointer type 'std::vector'

+2

Возможно, вы захотите '(* vec) [pos] .getSurname()'. – songyuanyao

+1

Кроме того, вы можете сделать вещи менее сложными, передав ссылку вместо этого: 'bool binFindInVec (vector & vec, string sur) {'. Тогда вы можете просто использовать: 'vec [pos] .getSurname()'. –

+4

Вы также можете подумать, почему вам нужно передать указатель на свой вектор, а не ссылку. –

ответ

3

Вы должны разыменования 'VEC' перед вызовом его оператор []:

(*vec)[pos].getSurname(); 

еще лучше (и гораздо безопаснее), передать параметр вектора Справка. НЕ как указатель:

bool binFindInVec(vector<Client> const& vec,string sur) 
+4

Также передайте 'const &', если вы фактически не манипулируете вектором. – NathanOliver

+0

спасибо, что я использовал const & потому что я фактически не манипулирую вектором – Sini

-1

Запись vec[pos]->getSurname() предполагает элементы vec являются указателями (или смарт-указатели). Поскольку вы передаете вектор равных Client объектов в качестве указателя, вам нужно разыменовать vec, чтобы иметь возможность использовать operator[]

+0

Не знаю, почему это было проголосовано. Это выглядит правильно. Не уверен, что вы подразумеваете под *, вам нужно разыменовать его, как указано roalz. * Хотя – NathanOliver

+0

я имел в виду, что вам нужно написать этот '(* vec)', чтобы иметь возможность использовать 'operator []' – Vutz

+0

Возможно, вы захотите отредактировать это в ответ, чтобы улучшить его. – NathanOliver