2017-01-18 3 views
0

Ceci est une fonction de recherche binaire de base pour un vecteur. Je veux accéder à la fonction get d'un objet, mais j'obtiens une erreur.ne peut pas accéder à la fonction de l'objet vectoriel via l'opérateur ->

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;  
} 

l'erreur:

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

Vous pouvez '(* VEC) [pos] .getSurname()'. – songyuanyao

+1

En outre, vous pourriez rendre les choses moins compliquées en passant une référence à la place: 'bool binFindInVec (vector & vec, string sur) {'. Ensuite, vous pouvez simplement utiliser: 'vec [pos] .getSurname()'. –

+4

Vous pourriez également vouloir réfléchir à la raison pour laquelle vous devez passer un pointeur sur votre vecteur plutôt que sur une référence. –

Répondre

3

Vous devez déréférencer 'VEC' avant d'appeler son opérateur []:

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

Mieux encore (et beaucoup plus sûr), passer le paramètre vecteur par référence. NON comme pointeur:

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

Passez également par 'const &' si vous ne manipulez pas réellement le vecteur. – NathanOliver

+0

merci j'ai utilisé const et parce que je ne manipule pas réellement le vecteur – Sini

-1

L'écriture vec[pos]->getSurname() prend les éléments de vec sont des pointeurs (ou pointeurs intelligents). Puisque vous passez un vecteur d'objets Client simples comme pointeur, vous devez déréférencer vec pour pouvoir utiliser operator[]

+0

Je ne sais pas pourquoi cela a été voté. Cela semble correct. Je ne sais pas ce que vous entendez par * vous devez le déréférencer comme indiqué par roalz. * – NathanOliver

+0

je voulais dire que vous devez écrire ce '(* vec)' pour pouvoir utiliser 'operator []' – Vutz

+0

Vous pourriez vouloir modifier cela dans la réponse alors pour l'améliorer. – NathanOliver