2017-01-18 6 views
0

これはベクトルの基本的なバイナリ検索関数です。オブジェクトの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(); 
まだ良い

(とはるかに安全)、によってベクトルパラメータを渡します参照。ポインタとして、NOT:

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

実際にベクトルを操作していない場合は、 'const&'によって渡します。 – NathanOliver

+0

ありがとう私はconst&私は実際にベクトルを操作しないので使用した – Sini

-1

ライティングvec[pos]->getSurname()vecの要素がポインタ(またはスマートポインタ)です前提としています。プレーンなClientオブジェクトのベクトルをポインタとして渡すので、

+0

これはなぜ投票がダウンしたかわからない。これは正しいように見えます。 – NathanOliver

+0

あなたは '(* vec)'を書いて、 'operator [] 'を使う必要があることを意味しました。 – Vutz

+0

あなたはそれを編集したいかもしれませんそれを改善するために答えに入れてください。 – NathanOliver

関連する問題