2012-01-11 10 views
-1

私はクラスを持っている:イテレータでクラス関数にアクセスするにはどうすればよいですか?

class Foo 
{ 
    std::string name_; 

    Foo(std::string name) 
    { 
    name_ = name; 
    } 

    std::string getName() 
    { 
    return name_; 
    } 
} 

私は、これらのクラスの人口ベクトルいる:

std::vector<Foo *> bar_; 
/* ... populate bar_ ... */ 
std::vector<Foo *>::iterator iter = bar_.begin(); 

while(iter != bar_.end()) 
{ 
    std::cout << "Name: " << (*iter)->getName() << std::endl; 
} 

マイ(* ITER) - >のgetName()はいえ動作していないと、私はこのエラーを取得します:

error: invalid cast from type ‘__gnu_cxx::__normal_iterator 
+3

は、あなたが完全なエラーメッセージを投稿することができますしてください?ところで、あなたが実際に持っているものでないならば、あなたは「これらのクラスのベクトル」を持っていると言ってはいけません。あなたのコードは正しいように見えます。エラーは他の場所にある可能性があります。 –

+2

「iter」が増分されないので、それは無限ループです。 'Foo'クラスの定義にセミコロンがないため、これが実際のコードであるかどうかは不明です。 – hmjd

+0

私は、これについて、今はあまり問題を提示していないため-1にします。それをクリーンアップして、実際のコードを投稿すれば、私は再考するでしょう。 –

答えて

0
  1. は、トン場合は、パブリックメンバー
  2. 次を行います時間イテレータはconst_iteratorのある(またはコンテナがconstのある、またはその両方)、メンバーのconst

を作るので

struct Foo 
{ 
    std::string getName() const { /* ... */ } 
}; 

または

class Foo 
{ 
public: 
    std::string getName() const { /* ... */ } 
}; 
+0

イテレータはconstではありません。また、OPがクラスを構築する以前の問題を持たないことを考えると、アクセスの問題は、(間違いなく不十分に提示された)問題の原因ではないように思われる。 –

関連する問題