2012-02-11 15 views
1

これを数時間解決しようとしていましたが、これを回避する方法はわかりません。ランタイムエラー:アサーションに失敗しました。反復可能でないリストイテレータ

[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 

私はまた、すべての第四の要素を指すポインタの別のリストを作成している:私は次のようなリストコンテナ内の値のリストを持っています。したがって、彼らは以下を指しています:

[0,4,8,12] 

私は、ポインタのリストの終わりを返すメソッドを持っています。

int* end() {return *(pointerlist.end()) ;}; 

これは私に「ランタイムエラー:アサーションが失敗した、リストIterater dereferencableない」を与える:次のように

を私は、リストの終わりを超えて到達しようとしていますので、私はこのエラーが供給していますことを理解しポインタの、しかし私はこのリストの最後の要素の値を持っていると思います。私も次のことをやろうとしましたが、事態を悪化させます。

int* end() {return *(pointerlist.end() - 1) ;}; 

ポインタのリストの最後の要素をどのように取得することができますか?

+1

あなたは「物事が悪化し、」何を意味するのですか?何が起こった? –

+0

-1を入力すると、次のような20個のエラーが表示されます。 エラーエラーC2784: '_RanIt1 :: difference_type std :: operator - (std :: move_iterator <_RanIt>&const std: :move_iterator <_RanIt2>&) ':' std :: move_iterator 'のテンプレート引数を推論できませんでした。<_RanIt>&' – SSS

答えて

1

これはそれを行う必要があります。

int* end() { 
    assert(!pointerlist.empty()); 
    return pointerlist.back(); 
} 
+0

素晴らしい、ありがとうございました!私はそのポインタからどのように前進できるのか知っていますか?例えば、今は12を返しますが、どうすればそれが終わりに向けて前進することができますか? (値は15になります) – SSS

+0

ちょうどそれを増やしてください! 'ptr = end(); ++ ptr; assert(* ptr == 13); ' –

関連する問題