2012-03-18 14 views
2

私のプログラムでは、私は「Transition」という名前のクラスを作っています。 私はdelta_という遷移型のベクトルを作成しました。 以降、私はdelta_を宣言したクラスの私の機能の実装の一つで、私は、下記の構文でイテレータを使用しようとしました:ベクトルイテレータを使用したときのエラー

vector<Transition>::iterator it; 
it=this->delta_.begin(); 

私はこれらの2つのエラーだ:で

をコンストラクタ `__gnu_cxx :: __ normal_iterator < _Iterator、容器> :: _normal_iterator(constの__gnu_cxx :: __ normal_iterator < _Iter、_Container> &)[_Iter = constのFaを::遷移*と、_Iterator = Faを::遷移*、_Container = std :: vector>] ':

const Fa::Transition* const' to Faを::変遷から無効な変換*」

今私は本当にミスがある見当がつかない。誰でも助けてください!

+0

ここで何が起こっているのかを正確に説明するには、さらにコードが必要です。定数型から可変型型への不正な型変換を試みているようですが、これはC++でコンパイラエラーをスローします。最も可能性の高い原因は、クラス「遷移」内の予期せぬ制約です。 – MrGomez

答えて

2

私は、をconstクラスで実行していますか?delta_はクラスのメンバーですか?

メソッドのconstanceは、クラスのメンバーが変更されないことを保証します。しかし、変数itはnon-constタイプiteratorを持っており、保護を壊すメンバーdelta_を変更する可能性があります。あなたはconstある方法でbegin()を使用する場合は

std::vectorは、2つのオーバーロードされたメソッドbegin()

iterator begin(); 
const_iterator begin() const; 

を持って、コンパイラは、第1を呼び出します。

したがって、メソッドの定数を拒否するか、const_iteratorを使用する必要があります。

オブジェクトの定数がぼやけているために私が推奨しないもう1つの方法は、ベクトルをヒープに置き、そのポインタを使って操作することです。

+0

はい、あなたは右です。 – Zohaib

+0

最近同じことが起こった))あなたを助けてうれしい。 –

+0

このエラーを取り除くにはどうすればよいですか?なぜconstメソッドがイテレータをconst_iteratorに戻すのか? – Zohaib

1

thisまたはdelta_どちらかbegin()const_iteratorを返すように引き起こして、constのようです。

+0

このdelta_ r定数は、それを宣言するiamが定数ではなく定数です。 – Zohaib

+0

それは私が何を意味したのかというだけです。 'const'関数では' this'の型は 'const型*'になります。 –

+0

ok、どうすればこのエラーを取り除くことができますか?なぜconstメソッドがイテレータをconst_iteratorに戻すのか? – Zohaib

関連する問題