2017-01-02 8 views
-9

イテレータを初めて使用していますが、私は問題に直面しています。これによりベクトルイテレータを使用してオブジェクトにアクセスしようとしています

vector<MyClass*> MyVector; 
MyVector.push_back(new object); 
MyVector.push_back(new object); 
MyVector.push_back(new object); 
vector<MyClass*>::iterator temp; 
temp = MyVector.end(); //because I want to use a function for the last one 
Sum += temp->get_num(); //function that returns an object member 

は、私が取得し、オブジェクトの内部に格納されているいくつかの数字を合計達成したい:

この

は、私はベクトルを作成し、オブジェクトにいくつかのポインタをプッシュするコードの一部です。しかし、それはコンパイルされないようだ。

エラーは次のとおりです。ポインタである '*一時.__ gnu_cxx :: __ normal_iterator < _Iterator、_Container> :: operator->>()' のメンバー 'get_num' のための

240 27〜\ TEST.CPP [エラー]要求'MyClass *'と入力してください。

+2

一部の書籍やチュートリアルをお読みください。 – Yves

+3

あなたは 'MyVector.back()'を探しています。 'end()'は1つの過去のイテレータであり、逆参照するとUBがトリガされます。 – Quentin

+0

'(* temp) - > get_num()'です。 –

答えて

1

MyClassオブジェクトを使用する前に、まずポインタの参照を解除する必要があります。

第2に、終了イテレータ(http://www.cs.northwestern.edu/~riesbeck/programming/c++/stl-iterators.html)を参照しないでください。

第3に、コンパイラは '+ ='トークンの前に期待される初期化子について警告していたはずです。

double sum = 0.0; 
sum += (*temp)->get_num(); 
関連する問題